web-dev-qa-db-ja.com

新しいJVMメモリパラメータInitialRAMPercentageおよびMinRAMPercentageの意味の明確化

参照: 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が使用されることはありません。

とても混乱しており、どうやら私だけではありません。私が herehere を収集したように、OpenJ9の人物もこれらのオプションの意図を完全には解析しないようです。彼らは、MinRAMPercentageインターフェースを実装しないことを選択したようです。

それで、MinRAMPercentageを設定することで実際に意図されている使用法と効果は何ですか?

26
Rubin Simons

-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を明示的に設定することです。

この質問 も参照してください。

36
apangin