CMSガベージコレクタ-いつ実行されますか?
-
13-12-2019 - |
質問
CMSコレクターがいつ起動するかを制御する可能性のある2つのパラメータについて混乱しています:
MaxHeapFreeRatio
(デフォルトでは70%)
CMSInitiatingOccupancyFraction
(デフォルトでは90%以上)
これらのパラメータのそれぞれは、正確にはどういう意味ですか?コレクターはいつ始まり(印段階)、集めます(広範な段階)か。
解決
CMSInitiatingOccupancyFraction
CMSがいつ起動するかを決定します(このオプションを有効にするには、次のように設定する必要があります -XX:+UseCMSInitiatingOccupancyOnly
). MaxHeapFreeRatio
世代空間のサイズを指定するオプションです。
例を参照してください。..
http://java.sun.com/docs/hotspot/gc1.4.2/faq.html
並行コレクションは一般的に高速化することはできませんが、以前に開始することはできます。古い世代の割り当てられた領域の割合がしきい値を超えると、並行コレクションの実行が開始されます。このしきい値は、コンカレントコレクタの一般的な経験に基づいて計算されます。完全なコレクションが発生している場合は、並行コレクションを早期に開始する必要があります。コマンドラインフラグC M S I Nitiatingoccupancyfractionを使用して、コレクションが開始されるレベルを設定できます。デフォルト値は約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)それにもかか
(使用されるプログラム -Xmx1536m -Xmx1536m -XX:NewSize=512m -XX:+UseConcMarkSweepGc
+gcロギングと2つのテストパラメータ)
私はこれに関する古いバグレポートも見つけました: http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=6486089