参照: https://bugs.Java.com/bugdatabase/view_bug.do?bug_id=8186315
特にInitialRAMPercentageと比較して、MinRAMPercentageの機能を見つけるのに本当に苦労しています。
InitialRAMPercentageは起動時にヒープの量を設定し、MinRAMPercentageとMaxRAMPercentageはJVMが縮小/拡張できるヒープの上限と下限を設定すると想定しました。
どうやらそうではありません。 JVMを(UseContainerSupportを使用して、これらの新しいメモリ設定パラメーターを持つ)起動すると、次のようになります。
Java -XX:+UseContainerSupport -XX:InitialRAMPercentage=40.0 -XX:MinRAMPercentage=20.0 -XX:MaxRAMPercentage=80.0 -XX:+PrintFlagsFinal -version | grep Heap
InitialHeapとMaxHeapが設定されると、「最小ヒープサイズ」の値が見つかりません。したがって、そのMinRAMPercentageが使用されることはありません。
とても混乱しており、どうやら私だけではありません。私が here と here を収集したように、OpenJ9の人物もこれらのオプションの意図を完全には解析しないようです。彼らは、MinRAMPercentageインターフェースを実装しないことを選択したようです。
それで、MinRAMPercentageを設定することで実際に意図されている使用法と効果は何ですか?
-XX:InitialRAMPercentage
は 初期ヒープサイズの計算 に使用されますInitialHeapSize
/-Xms
が設定されていません。
直感に反しますが、両方の-XX:MaxRAMPercentage
および-XX:MinRAMPercentage
は、計算に使用されます最大ヒープサイズのときMaxHeapSize
/-Xmx
が設定されていません:
物理メモリが小さいシステムの場合、MaxHeapSize
は次のように推定されます。
phys_mem * MinRAMPercentage / 100 (if this value is less than 96M)
それ以外の場合(非小物理メモリ)MaxHeapSize
は次のように推定されます
MAX(phys_mem * MaxRAMPercentage / 100, 96M)
正確な公式 は、他の要因も考慮に入れるため、もう少し複雑です。
注:初期および最大ヒープサイズを計算するアルゴリズムは、特定のJVMバージョンによって異なります。ヒープサイズを制御する好ましい方法は、Xmx
およびXms
を明示的に設定することです。
この質問 も参照してください。