「内部構造」タグの記事が17件件あります
全てのタグを見るOrinoco: 若い世代のガベージコレクション
V8でのJavaScriptオブジェクトは、V8のガベージコレクタによって管理されているヒープ上に割り当てられます。以前のブログ記事では、ガベージコレクションの停止時間を短縮する方法(複数回)やメモリ消費量を削減する方法について既に説明しました。本記事では、Orinocoの最新機能の1つである並列スカベンジャーを紹介し、V8のガベージコレクタの設計決定や、進行途中で実装した代替アプローチについて議論します。
V8アーキテクチャの複雑さを飼いならす — CodeStubAssembler
怠惰に関するインターンシップ:非最適化された関数の怠惰な解除
約3か月前、私はインターンとしてV8チーム(Googleミュンヘン)に参加し、それ以来VMの_Deoptimizer_に取り組んできました。このプロジェクトは完全に新しいものであり、興味深く挑戦的なものでした。インターンシップの最初の部分ではVMのセキュリティ面の改善に焦点を当てました。そして2つ目の部分ではパフォーマンス改善、具体的には非最適化された関数の解除に使われるデータ構造の削除に取り組みました。このデータ構造はガベージコレクション中にパフォーマンスボトルネックとなっていました。このブログ投稿ではこのインターンシップの2番目の部分について説明します。V8が以前どのように非最適化された関数を解除していたか、どのように変更したか、そしてどのようなパフォーマンス改善が得られたかを説明します。
V8 エクストラ
V8はJavaScript言語の組み込みオブジェクトと関数の大部分をJavaScript自体で実装しています。たとえば、Promisesの実装がJavaScriptで書かれているのを見ることができます。このような組み込み機能は、自己ホスト型 と呼ばれます。これらの実装は、スタートアップスナップショットに含まれており、新しいコンテキストをランタイムで自己ホスト型の組み込み機能をセットアップして初期化する必要なく迅速に作成できます。
`Math.random()`には`Math.random()`だけではない
Math.random()
は引数を取らず、0以上1未満の正の符号を持つNumber
値をランダムまたは擬似ランダムにほぼ均等分布で返します。この関数は実装依存のアルゴリズムまたは戦略を使用します。
コードキャッシュ
V8はジャストインタイムコンパイル (JIT) を使用してJavaScriptコードを実行します。これは、スクリプトを実行する直前にそれを解析してコンパイルしなければならないことを意味し、これがかなりのオーバーヘッドを引き起こす可能性があります。私たちが最近発表したように、コードキャッシュはこのオーバーヘッドを軽減するための技術です。スクリプトが初めてコンパイルされる際、キャッシュデータが生成されて保存されます。次回V8が同じスクリプトをコンパイルする必要があるとき、たとえ異なるV8インスタンスであっても、キャッシュデータを使用してコンパイル結果を再現することができ、一からコンパイルする必要がありません。その結果、スクリプトはより速く実行されます。