CMS コレクターが起動するタイミングを制御する可能性のある 2 つのパラメーターについて、私は混乱しています。
MaxHeapFreeRatio
(デフォルトでは 70%)
CMSInitiatingOccupancyFraction
(デフォルトで 90% 以上)
これらの各パラメーターは、正確には何を意味するのでしょうか? コレクターはいつ開始 (マーキング フェーズ) し、いつ収集しますか (スイープ フェーズ)?
CMS コレクターが起動するタイミングを制御する可能性のある 2 つのパラメーターについて、私は混乱しています。
MaxHeapFreeRatio
(デフォルトでは 70%)
CMSInitiatingOccupancyFraction
(デフォルトで 90% 以上)
これらの各パラメーターは、正確には何を意味するのでしょうか? コレクターはいつ開始 (マーキング フェーズ) し、いつ収集しますか (スイープ フェーズ)?
CMSInitiatingOccupancyFraction
CMS が起動するタイミングを決定します (このオプションを有効にするには、 も設定する必要があります-XX:+UseCMSInitiatingOccupancyOnly
)。MaxHeapFreeRatio
世代空間のサイズを設定するオプションです。
例を参照してください...
http://java.sun.com/docs/hotspot/gc1.4.2/faq.html
並行収集は通常、高速化することはできませんが、より早く開始することはできます。古い世代に割り当てられたスペースのパーセンテージがしきい値を超えると、同時収集が実行を開始します。このしきい値は、並行コレクターでの一般的な経験に基づいて計算されます。完全なコレクションが発生している場合は、同時コレクションを早期に開始する必要がある場合があります。コマンド ライン フラグ CMSInitiatingOccupancyFraction を使用して、収集を開始するレベルを設定できます。デフォルト値は約 68% です。値を調整するコマンド ラインは次のとおりです。
-XX:CMSInitiatingOccupancyFraction=<percent>
http://www.oracle.com/technetwork/java/gc-tuning-5-138395.html
デフォルトでは、仮想マシンはコレクションごとにヒープを拡大または縮小して、各コレクションのライブ オブジェクトに対する空き領域の比率を特定の範囲内に維持しようとします。このターゲット範囲は、パラメータ
-XX:MinHeapFreeRatio=<minimum>
およびによってパーセンテージとして設定され-XX:MaxHeapFreeRatio=<maximum>
、合計サイズは によって上下に制限さ-Xms
れ-Xmx
ます。
.. また ..
http://www.petefreitag.com/articles/gctuning/
-XX:MaxHeapFreeRatio
- 世代の空き領域のパーセンテージがこの値を超えると、世代はこの値を満たすように縮小されます。デフォルトは 70 です
編集:バイト配列のマップをランダムに作成してコピーするテストプログラムを使用して、いくつかのシミュレーションを実行しました。a) 分数の値が尊重されていないことに気付きました - 特に保守的な値 (たとえば 50) では、CMS の初期マーク ステージが占有率 50% をはるかに超えて、通常は 70 ~ 80% で開始され、b) それでも分数の値が小さいと CMS が作成されました。初期段階は前に発生します (使用されるプログラム-Xmx1536m -Xmx1536m -XX:NewSize=512m -XX:+UseConcMarkSweepGc
+ GC ログと 2 つのテスト パラメーター)
これに関する古いバグ レポートも見つけました: http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=6486089