以下のメモリオプションを設定しています:
export MEM_OPTS = "-Xmx2560m -Xms2560m -XX:NewSize = 786m -XX:MaxNewSize = 786m -XX:+ UseTLAB -XX:MaxPermSize = 512m"
GCパラメータは次のとおりです。
export GC1_OPTS = "-XX:+ UseConcMarkSweepGC -XX:+ UseParNewGC -XX:CMSInitiatingOccupancyFraction = 5 -XX:+ CMSPermGenSweepingEnabled -XX:+ CMSClassUnloadingEnabled -XX:+ CMSParallelRemarkEnabled -XX:+ UseAdaptiveGCBound = "-XX:+ ExplicitGCInvokesConcurrent"
CMSがいつ実行されるか知りたいのですが、2560 MBの50%の後で実行されますか、それとも512 MBのメモリの50%の後で実行されますか。
コンセプトは何ですか?
私の合計ヒープメモリは= 2560 + 786 + 512 MB ....でしょ?または「-XX:NewSize = 786m-XX:MaxNewSize = 786m」は非ヒープの場合です。概念を説明してください。
どちらでもない。古い世代の占有率が50%に達した後、実行する資格があります。ここで、古い世代のサイズは、ヒープのサイズから新しい世代のサイズを引いたものです:2560m-786m = 1792m、つまり、古い世代は896mに達します。しかし、それが常に唯一のパラメータであるとは限りません。 -XX:+ UseCMSInitiatingOccupancyOnlyを唯一のパラメーターにしたい場合は、-XX:+ UseCMSInitiatingOccupancyOnlyを追加することをお勧めします(私の経験では、CMSは実際にはしきい値でトリガーされますが、それがなくても)。
要約する:
-Xmx
は合計ヒープメモリです-XX:NewSize
/-XX:MaxNewSize
はそのヒープ内の新世代のサイズの範囲です-XX:PermSize
/-XX:MaxPermSize
は、非ヒープメモリである永続世代のサイズの範囲です。