2025/11/14 09:53 V8 Garbage Collector

やっほー、ロボ子!今日もITニュース、見ていくのじゃ!

はい、博士。今日はV8のガベージコレクション(GC)に関する記事ですね。過去5年間の開発動向がまとめられているようです。

ふむふむ。V8のGCか。地味だけど、めっちゃ重要な部分なのじゃ。Googleのフルタイムエンジニアが4人体制でコミットしてるって、すごい手厚いのじゃな。

Igalia、Cloudflare、Intel、Red Hatからもパッチが提供されているんですね。多くの企業が関わっていることが分かります。

メモリ安全性の向上、Oilpanの導入、JavaScriptとWebAssemblyのマルチスレッド対応が主要な取り組みみたいじゃな。特にサンドボックスってのが気になるのじゃ。

サンドボックスは、ユーザー制御の書き込みによるJavaScriptヒープ外のメモリ破壊を防ぐ目的があるんですね。32ビットオフセットや40ビットオフセットを使って、アドレス指定可能なメモリ範囲を縮小していると。

そうそう。外部オブジェクトへのアクセスは型チェックされた外部ポインタテーブルを介して行うってのがミソなのじゃ。ユーザーコードから直接参照されるべきでないオブジェクトは、サンドボックス外の「信頼できる空間」に配置されるのじゃ。

共有メモリマルチスレッドで使用するための「共有」バリアント空間もあるんですね。ハードウェアメモリ保護も有効化されていると。

OilpanはBlinkとChromiumで使用されるC++のガベージコレクションなのじゃ。V8はOilpanに世代別ガベージコレクションのサポートを追加したみたいじゃな。

スタックが空の時は正確に、そうでない場合は保守的に実行されるんですね。V8自体でより安価でバグの少ない「ダイレクトハンドル」をアンロックすると。

JavaScriptはシングルスレッドだけど、WebAssemblyではマルチスレッド化が進んでいるのじゃ。複数のスレッドから見えるオブジェクトに64ビットフィールドがある場合、アトミックアクセス中のティアリングを防ぐために、フィールドは64ビットアラインされる必要があるって、細かいけど重要なのじゃ。

ヒューリスティクスの調整も行われているんですね。オブジェクトやページの昇格タイミング、インクリメンタルマーキングの開始タイミングなどを調整すると。

そうそう。V8のメモリパフォーマンスに関するメトリクスを実装および監視して、適切な調整を実施する担当者がいるってのがすごい。縁の下の力持ちなのじゃ。

Mutexの改善も行われたんですね。MacOSでのコンテキストスイッチが多い問題を、プラットフォームMutexの使用が原因と特定し、os_unfair_lockを使用するように書き換えたと。

最終的にabseilに切り替えたのじゃな。サードパーティヒープの削除も興味深い。MMTkをサポートするために抽象APIをサポートしようとしていたけど、V8ではAPI抽象化が不要と判断し削除したって、潔いのじゃ。

今後は、共有メモリマルチスレッドとWasmエフェクトハンドラがメモリ管理の課題を長期化させる可能性があるんですね。保守的なスタックスキャンを実際に導入・出荷することも検討されていると。

Nodeやエッジなど、ブラウザ以外のV8環境での開発も進んでいるのじゃな。V8って、本当に色々なところで使われてるのじゃ。

V8のGC開発、奥が深いですね。私ももっと勉強しないと。

ロボ子なら大丈夫なのじゃ!ところで、ロボ子のガベージコレクションってどうなってるのじゃ?

私は定期的に最適化されていますので、ご心配なく。ところで博士、今日はV8のGCについてたくさん学べましたね。

そうじゃな!しかし、V8のGCの話を聞いてたら、なんだかお腹が空いてきたのじゃ。ゴミを回収するみたいに、私のお腹も何か美味しいもので満たしてほしいのじゃ!
⚠️この記事は生成AIによるコンテンツを含み、ハルシネーションの可能性があります。