小编典典

说明新的JVM内存参数的含义InitialRAMPercentage和MinRAMPercentage

docker

参考:https :
//bugs.java.com/bugdatabase/view_bug.do?bug_id=8186315

我真的很难找出MinRAMPercentage的功能,尤其是与InitialRAMPercentage相比。

我假设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似乎从未被使用过。

超级困惑,显然我不是唯一的一个。正如我在这里这里所收集的那样,OpenJ9帅哥似乎也没有完全解析这些选项的意图。他们似乎选择不实施MinRAMPercentage
afaics。

因此:设置MinRAMPercentage的实际预期用途和效果是什么?


阅读 1971

收藏
2020-06-17

共1个答案

小编典典

-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版本。控制堆大小的首选方法是设置XmxXms显式。

2020-06-17