メインコンテンツまでスキップ

「内部構造」タグの記事が17件件あります

全てのタグを見る

ハッシュテーブルの最適化:ハッシュコードを隠す

· 約7分
[Sathya Gunasekaran](https://twitter.com/_gsathya)、ハッシュコードの管理者

ECMAScript 2015 は、Map、Set、WeakSet、WeakMap といった複数の新しいデータ構造を導入しました。これらはいずれも、内部的にハッシュテーブルを使用しています。この投稿では、最近の改善点V8 v6.3+ がどのようにしてハッシュテーブルにキーを格納するかを詳しく解説します。

Orinoco: 若い世代のガベージコレクション

· 約10分
Ulan Degenbaev, Michael Lippautz, and Hannes Payer, [TSAN](https://github.com/google/sanitizers/wiki/ThreadSanitizerCppManual)の友人

V8でのJavaScriptオブジェクトは、V8のガベージコレクタによって管理されているヒープ上に割り当てられます。以前のブログ記事では、ガベージコレクションの停止時間を短縮する方法複数回)やメモリ消費量を削減する方法について既に説明しました。本記事では、Orinocoの最新機能の1つである並列スカベンジャーを紹介し、V8のガベージコレクタの設計決定や、進行途中で実装した代替アプローチについて議論します。

V8アーキテクチャの複雑さを飼いならす — CodeStubAssembler

· 約13分
[ダニエル・クリフォード](https://twitter.com/expatdanno)、CodeStubAssembler アセンブラ

この投稿では、CodeStubAssembler(CSA)を紹介します。これは、最近の複数のV8リリースでいくつかの大きな パフォーマンス 向上を達成するために非常に役立ったV8のコンポーネントです。CSAはまた、V8チームが高い信頼性で低レベルのJavaScript機能を迅速に最適化する能力を大幅に向上させ、開発のスピードを向上させました。

怠惰に関するインターンシップ:非最適化された関数の怠惰な解除

· 約15分
ジュリアナ・フランコ ([@jupvfranco](https://twitter.com/jupvfranco)), 怠惰の専門家

約3か月前、私はインターンとしてV8チーム(Googleミュンヘン)に参加し、それ以来VMの_Deoptimizer_に取り組んできました。このプロジェクトは完全に新しいものであり、興味深く挑戦的なものでした。インターンシップの最初の部分ではVMのセキュリティ面の改善に焦点を当てました。そして2つ目の部分ではパフォーマンス改善、具体的には非最適化された関数の解除に使われるデータ構造の削除に取り組みました。このデータ構造はガベージコレクション中にパフォーマンスボトルネックとなっていました。このブログ投稿ではこのインターンシップの2番目の部分について説明します。V8が以前どのように非最適化された関数を解除していたか、どのように変更したか、そしてどのようなパフォーマンス改善が得られたかを説明します。

V8 エクストラ

· 約8分
ドメニック・ドニコラ([@domenic](https://twitter.com/domenic))、ストリーム魔術師

V8はJavaScript言語の組み込みオブジェクトと関数の大部分をJavaScript自体で実装しています。たとえば、Promisesの実装がJavaScriptで書かれているのを見ることができます。このような組み込み機能は、自己ホスト型 と呼ばれます。これらの実装は、スタートアップスナップショットに含まれており、新しいコンテキストをランタイムで自己ホスト型の組み込み機能をセットアップして初期化する必要なく迅速に作成できます。

`Math.random()`には`Math.random()`だけではない

· 約5分
ヤン・グオ ([@hashseed](https://twitter.com/hashseed))、ソフトウェアエンジニア兼サイコロデザイナー

Math.random()は引数を取らず、0以上1未満の正の符号を持つNumber値をランダムまたは擬似ランダムにほぼ均等分布で返します。この関数は実装依存のアルゴリズムまたは戦略を使用します。

コードキャッシュ

· 約3分
Yang Guo ([@hashseed](https://twitter.com/hashseed)), ソフトウェアエンジニア

V8はジャストインタイムコンパイル (JIT) を使用してJavaScriptコードを実行します。これは、スクリプトを実行する直前にそれを解析してコンパイルしなければならないことを意味し、これがかなりのオーバーヘッドを引き起こす可能性があります。私たちが最近発表したように、コードキャッシュはこのオーバーヘッドを軽減するための技術です。スクリプトが初めてコンパイルされる際、キャッシュデータが生成されて保存されます。次回V8が同じスクリプトをコンパイルする必要があるとき、たとえ異なるV8インスタンスであっても、キャッシュデータを使用してコンパイル結果を再現することができ、一からコンパイルする必要がありません。その結果、スクリプトはより速く実行されます。