「Java GC」を公開しました
「Java GC」を公開しました
Java(HotSpot)のガベージコレクションを学ぶためのサイト Java GC を公開しました。
雰囲気で理解した気になっていたので、改めて変遷を含めて学び直したい、ということで勉強用のサイトを作りました。文面で読んでもなかなか理解できないので、図を動的に見られるようにしました。
向き合えるかはわからないけれど、これで一旦学習を進めます。
##2ページ構成
| ページ | 内容 |
|---|---|
| GCの基礎 | 「ゴミ」の定義である到達可能性、片付け方の3種類(Mark-Sweep / Mark-Compact / Copying)、弱世代仮説、バリア、Stop-the-Worldと安全点、3つのトレードオフ、用語集 |
| Java GC年代記 | Serial GCからGenerational ZGCまでの8つのコレクタを、ヒープの可視化とSTWタイムラインで1フェーズずつ動かす |
基礎ページで前提を押さえてから年代記へ、という導線にしています。どちらから入っても行き来できます。
年代記のほうは、GC Rootsからの参照グラフとスロットを描いて、マーク・退避・コンパクションでオブジェクトが実際に動くようにしました。アプリスレッドとGCスレッドのガント(赤ハッチがStop-the-World、青が並行)も並べているので、コレクタごとに「どこで止まるのか」を見比べられます。← → でフェーズ移動、Space で自動再生です。
##作りについて
依存ライブラリなしのHTML + CSSで、ビルド手順もパッケージマネージャもありません。GitHub Pagesにそのまま置いています。
図はいずれも概念モデルです。実際のHotSpotはカードテーブルやRemembered Set、TLAB、各種バリアなど、描いていない仕組みで動いています。手元の挙動を見るなら -Xlog:gc*(JDK 9以降)が一次情報です。
誰の役に立つかもわからないし、ほぼAIのポン出しですが、とりあえず公開しました。リポジトリは h-kono-it/java-gc です。