引用: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似乎从未被使用过。
super 困惑,显然我不是唯一的一个。 OpenJ9帅哥们似乎也没有完全解析这些选项的意图,因为我收集了here和here。他们似乎选择不实现MinRAMPercentage afaics。
因此:设置MinRAMPercentage的实际预期用途和效果是什么?
最佳答案
当未设置-XX:InitialRAMPercentage
/InitialHeapSize
时,-Xms
用于calculate initial heap size。
听起来违反直觉,但是当未设置-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)
The exact formula比较复杂,因为它还考虑了其他因素。
注意:用于计算初始堆大小和最大堆大小的算法取决于特定的JVM版本。控制堆大小的首选方法是显式设置
Xmx
和Xms
。另请参见this question。
关于java - 说明新的JVM内存参数的含义InitialRAMPercentage和MinRAMPercentage,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/54292282/