新的JVM内存参数InitialRAMPercentage和MinRAMPercentage的含义澄清

68

参考文献: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。

所以:设置MinRAMPercentage的真正意图和效果是什么?

2个回答

102

-XX:InitialRAMPercentage用于在未设置InitialHeapSize / -Xms计算初始堆大小

听起来有些违反直觉,但是-XX:MaxRAMPercentage-XX:MinRAMPercentage都用于计算最大堆大小MaxHeapSize / -Xmx未设置时:

  • For systems with small physical memory MaxHeapSize is estimated as

    phys_mem * MinRAMPercentage / 100  (if this value is less than 96M)
    
  • Otherwise (non-small physical memory) MaxHeapSize is estimated as

    MAX(phys_mem * MaxRAMPercentage / 100, 96M)
    

确切的公式稍微复杂一些,因为它还考虑了其他因素。

注意:计算初始堆大小和最大堆大小的算法取决于特定的JVM版本。控制堆大小的首选方法是显式设置XmxXms

另请参见此问题


你能解释一下这个吗? 命令: sudo docker run --memory='10m' adoptopenjdk/openjdk11 java -XX:+PrintFlagsFinal -version | grep MaxHeapSize 结果:size_t MaxHeapSize = 8388608 {product} {ergonomic} openjdk version "11" 2018-09-25 OpenJDK Runtime Environment AdoptOpenJDK (build 11+28) OpenJDK 64-Bit Server VM AdoptOpenJDK (build 11+28, mixed mode)``` 根据你的解释,MaxHeapSize应该是5M而不是8M。 - Michał Mielec
5
正如我所说的,还有其他因素,例如对齐方式默认生成大小。当内存限制非常小的时候,它们会发挥作用。 - apangin
如果没有明确提供,那么InitialHeapSize/MaxHeapSize不是总是被设置和用作Xms/Xmx吗? - hi_my_name_is
@freakman 不太确定我理解你的意思。请提出一个单独的问题,描述你的问题并提供一个例子。 - apangin
有一件事我不明白,为什么要分别设置MinRAMPercentage和MaxRAMPercentage?将内存分成低于100MB和高于100MB的两个范围有何意义呢? - tkalvin
显示剩余2条评论

1

取决于您的容器内存,假设您的容器内存为1 GB,则在这种情况下将使用-XX:MaxRAMPercentage = 80来确定最大堆大小~将使用800mb堆内存

假设您的容器内存小于250mb,则将使用-XX:MinRAMPercentage = 20.0 ~将使用50mb堆内存

使用此文章以了解更多XX:MinRAMPercentage,XX:MaxRAMPercentage


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接