Java ZGC の変遷と設定オプション


ZGC の変遷

JDK JEP 備考
JDK 11 JEP 333: ZGC: A Scalable Low-Latency Garbage Collector (Experimental) Linux/x64 向け
JDK 13 JEP 351: ZGC: Uncommit Unused Memory (Experimental) 未使用ヒープをOSに返却
JDK 14 JEP 364: ZGC on macOS (Experimental) macOS 向け
JDK 14 JEP 365: ZGC on Windows (Experimental) Windows 向け
JDK 15 JEP 377: ZGC: A Scalable Low-Latency Garbage Collector (Production) 正式リリース
JDK 21 JEP 439: Generational ZGC 世代別ZGC
JDK 23 JEP 474: ZGC: Generational Mode by Default 世代別モードのデフォルト化
JDK 24 JEP 490: ZGC: Remove the Non-Generational Mode 非世代別モードの削除

JDK 9 以降の(サーバークラス)デフォルトは G1GC。

JDK 23 のデフォルトも G1GC(あくまでもZGCのデフォルトモードが世代別に変更になっただけ)。


ZGC オプション

設定 説明
-XX:+UseZGC ZGCを有効化
-XX:+ZGenerational 世代別モードを有効化(JDK23のデフォルト)(JDK 24で削除)。非世代別は -XX:-ZGenerational
-Xmx 最大ヒープ・サイズ
-Xms 最小ヒープ・サイズ
-XX:SoftMaxHeapSize=<size> ZGCが目標にするヒープサイズ。ZGCはこの値を超えることもあるが、できるだけ早くSoftMaxHeapSize以下になるようにOSにメモリを返却しようとする
-XX:-ZUncommit 未使用のメモリーをコミット解除し、OSに返却する機能を無効化する。-Xmx-Xms が同値の場合、この機能は実質無効となる。-Xms 以下には返却されない
-XX:ZUncommitDelay=<seconds> メモリーをコミット解除の遅延時間((デフォルト300秒)
-XX:+AlwaysPreTouch 起動中にヒープを準備する(起動が遅くなるが、平均待ち時間が短縮する)
-XX:ConcGCThreads=<num> 並行GCスレッド数(ZGCにより自動的にヒューリスティック選択されるため通常は設定不要)