kouno.log

    ↑↓ で移動 · Enter で開く

    「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 です。