G1GCのオプションについてまとめました。
G1GCオプション
G1GCを使用するには-XX:+UseG1GC
オプションを指定する必要があります。その他のオプションは以下の通りです。
オプション | デフォルト | 概要 |
---|---|---|
-XX:G1HeapRegionSize=N | 以下参照 | リージョンのサイズを指定 |
-XX:MaxGCPauseMillis=N | 200 | 停止期間の目標値 |
-XX:G1NewSizePercent=N | 5 | 若い世代の最小ヒープサイズ割合 |
-XX:G1MaxNewSizePercent=N | 60 | 若い世代の最大ヒープサイズ割合 |
-XX:ParallelGCThreads=N | 以下参照 | GCスレッド数 |
-XX:ConcGCThreads=N | 以下参照 | マーキングスレッド数 |
-XX:InitiatingHeapOccupancyPercent=N | 45 | マーキングサイクル開始の閾値 |
-XX:G1MixedGCLiveThresholdPercent=N | 85 | |
-XX:G1HeapWastePercent=N | 5 | |
-XX:G1MixedGCCountTarget=N | 8 | |
-XX:G1OldCSetRegionThresholdPercent=N | 10 | |
-XX:G1ReservePercent=N | 10 |
-XX:G1HeapRegionSize
G1でのヒープは固定サイズのリージョンに分割されています。このサイズをオプションで指定する場合は、リージョンのサイズは 2 の累乗で 1MB から 32MB の範囲で指定する必要があります。ヒープの初期サイズXms
を基にリージョンを約 2048 個以上に分割できる値のうち最小のものを使用してください。G1はリージョンが 2,048 個程度の状況を前提として設計されています。
オプションで指定しない場合も起動時にヒープの初期サイズXms
の値を元に決定され、常に一定です。デフォルトは 0 であるため、以下の式にもとづいて算出されます。直接指定する場合も参考にしてください。2 の累乗以外の値が指定された場合は最も近い 2 の累乗の値に切り下げられます。
ヒープの初期サイズ | リージョンサイズ |
---|---|
4GB未満 | 1MB |
4GB以上 ~ 8GB未満 | 2MB |
8GB以上 ~ 16GB未満 | 4MB |
16GB以上 ~ 32GB未満 | 8MB |
32GB以上 ~ 64GB未満 | 16MB |
64GB以上 | 32MB |
その他注意点としては、① 初期サイズXms
と最大サイズXmx
が大きく異る場合はリージョンの数が多くなりすぎることがあるため、リージョンのサイズを増やす事を検討する。
② G1ではリージョンのサイズの 50% を超えるオブジェクトは超巨大オブジェクトとみなされるため、そのようなオブジェクトがある場合は基本的に 1 つのリージョンに収まるようにサイズを計算する。ただしオブジェクトのサイズを削減することも考えましょう。
-XX:MaxGCPauseMillis
MaxGCPauseMillis はデフォルトで 200 (ミリ秒) ですが、アプリケーションスレッドの停止を伴うフェーズで、停止時間がこの値を超えた場合、G1 は指定された目標値を達成できるように、状況の緩和を試みようとしてアルゴリズムを動的に調整します。FullGC が発生する場合には値を増やすことを検討してください。
-XX:ParallelGCThreads
アプリケーションスレッドが停止するフェーズで使われる GC のスレッド数を変更できます。デフォルト値は論理CPU数が設定されます (最大値は8)。実行環境の論理CPU数が9以上の場合は(8+(CPU数−8)×(5÷8))
で計算されます。
-XX:ConcGCThreads
マシン上に十分な CPU が搭載されているのであれば、バックグラウンドでマーク付けを行うスレッドの数を増やすことを検討します。デフォルト値は(ParallelGCThreads+2)/4
で計算されます。小数点以下は切り捨てで最低は1です。ParallelGCThreads を超える値は設定できません。
その他参考情報