2012-09-12 23 views
10

私はメモリオプションの下に構成されています:JavaのGCコンセプト:CMSInitiatingOccupancyFraction

輸出MEM_OPTS = " - Xmx2560m -Xms2560m -XX:NewSizeパラメータ= 786メートル-XX:MaxNewSize = 786メートル-XX:+ UseTLAB -XX:MaxPermSizeを= 512メートル"

GCパラメータは以下の通り

エクスポートGC1_OPTS =" - XX:+ UseConcMarkSweepGCを-XX:+ UseParNewGC -XX:CMSInitiatingOccupancyFraction = 50 -XX:+ CMSPermGenSweepingEnabled -XX:+ CMSClassUnloadingEnabled -XX: + CMSParallelRemarkEnabled -XX:+ UseAdaptiveGCBoundary " エクスポートGC2_OPTS = " - XX:+ ExplicitGCInvokesConcurrent"

私が知りたいのは、CMSを実行するときです.2560MBの50%後に実行するか、512MBのメモリの50%後に実行しますか。

コンセプトは何ですか?

私の合計ヒープメモリは2560 + 786 + 512MBです。または "-XX:NewSize = 786m -XX:MaxNewSize = 786m"はNONヒープ用です。概念を説明してください。

答えて

22

どちらもありません。旧世代の占有率が50%に達した後、実行可能になります。古い世代のサイズはヒープのサイズから新世代のサイズを引いたものです:2560m - 786m = 1792m。古い世代は896mに達する。しかし、それは常に唯一のパラメータではありません。唯一のパラメータにしたい場合は、-XX:+ UseCMSInitiatingOccupancyOnlyを追加することができます(私の経験では、CMSはそれがなくても実際にはしきい値でトリガーされます)。

要約する:

  • -Xmxを合計ヒープメモリ
  • -XX:NewSize/-XX:MaxNewSize差がのサイズの範囲であるヒープ
  • 内部新世代のサイズの範囲であります旧世代
  • -XX:PermSize/-XX:MaxPermSizeは、非ヒープメモリである永久世代のサイズの範囲です
+0

ありがとうございます。 – VJS