参考文献: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的真正意图和效果是什么?
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