Java 澄清新JVM内存参数InitialRAMPercentage和MinRAMPercentage的含义
参考: 我真的很难弄清楚MinRAMPercentage做了什么,尤其是与InitialRAMPercentage相比 我假设InitialRAMPercentage在启动时设置堆的数量,MinRAMPercentage和MaxRAMPercentage设置允许JVM收缩/增长到的堆的底部和顶部限制 显然情况并非如此。当我启动JVM时(使用UseContainerSupport,具有这些新的内存设置参数),如下所示: 设置InitialHeap和MaxHeap时,我找不到“最小堆大小”值;因此,MinRampentage似乎从未被使用过 非常困惑,显然,我不是唯一一个;正如我收集和分析的那样,OpenJ9似乎也没有完全解析这些选项的意图。他们似乎选择了不实施MinRAMPercentage AFAICJava 澄清新JVM内存参数InitialRAMPercentage和MinRAMPercentage的含义,java,docker,jvm,Java,Docker,Jvm,参考: 我真的很难弄清楚MinRAMPercentage做了什么,尤其是与InitialRAMPercentage相比 我假设InitialRAMPercentage在启动时设置堆的数量,MinRAMPercentage和MaxRAMPercentage设置允许JVM收缩/增长到的堆的底部和顶部限制 显然情况并非如此。当我启动JVM时(使用UseContainerSupport,具有这些新的内存设置参数),如下所示: 设置InitialHeap和MaxHeap时,我找不到“最小堆大小”值;因此,
那么:设置MinRAMPercentage的实际预期用途和效果是什么?
-XX:InitialRAMPercentage
用于在未设置InitialHeapSize
/-Xms
时使用
这听起来有悖常理,但当未设置MaxHeapSize
/-Xmx
时,使用-XX:MaxRAMPercentage
和-XX:MinRAMPercentage
计算最大堆大小:
- 对于物理内存较小的系统,估计MaxHeapSize为
phys_mem * MinRAMPercentage / 100 (if this value is less than 96M)
MAX(phys_mem * MaxRAMPercentage / 100, 96M)
- 否则(非小物理内存)
估计为MaxHeapSize
phys_mem * MinRAMPercentage / 100 (if this value is less than 96M)
MAX(phys_mem * MaxRAMPercentage / 100, 96M)
Xmx
和Xms
另请参见。您如何解释这一点?命令:
sudo docker run--memory='10m'采用openjdk/openjdk11 java-XX:+PrintFlagsFinal-version | grep MaxHeapSize
Result:拾取java_工具选项:-XX:+UseContainerSupport size_t MaxHeapSize=8388608{product}{人体工程学}openjdk version“11”2018-09-25 openjdk运行时环境采用openjdk(构建11+28)OpenJDK 64位服务器VM采用OpenJDK(构建11+28,混合模式)
根据您的解释,MaxHeapSize不应为5M8M@MichałMielec正如我所说,还有其他因素,如和。它们是在内存限制很小的时候出现的。如果它们没有明确提供,InitialHeapSize/MaxHeapSize不是总是设置并用作Xms/Xms吗?@freakman不确定我是否理解你的意思。请提出一个单独的问题,描述你的问题并提供一个例子。