就像问题一样,当我使用 JVM 选项 -XX+PrintFlagsFinal 运行程序时,我可以看到打印的 MaxHeapSize 如下:
bool MaxFDLimit = true {product}
uintx MaxGCMinorPauseMillis = 4294967295 {product}
uintx MaxGCPauseMillis = 4294967295 {product}
uintx MaxHeapFreeRatio = 70 {product}
**uintx MaxHeapSize := 1044381696 {product}**
intx MaxInlineLevel = 9 {product}
intx MaxInlineSize = 35 {product}
intx MaxJavaStackTraceDepth = 1024 {product}
当我使用 JVM 选项 -XX+PrintCommandLineFlags 运行相同的程序时,我可以看到 MaxHeapSize 为:
-XX:InitialHeapSize=65192896 **-XX:MaxHeapSize=1043086336** -XX:+PrintCommandLineFlags -XX:+UseCompressedClassPointers -XX:+UseCompressedOops -XX:-UseLargePagesIndividualAllocation -XX:+UseParallelGC
你能告诉我为什么这两个不同吗?我认为它们应该是一样的。
最佳答案
由于对齐和人体工程学调整,实际堆大小可能与用户在命令行中指定的不同。默认情况下,堆是 2MB 对齐的 ( see collectorPolicy.cpp )。
1044381696 是 1043086336 的 2MB 对齐后的最终堆大小。
关于jvm - 为什么调用-XX :+PrintFlagsFinal and -XX:+PrintCommandLineFlags?时MaxHeapSze的输出不同,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24227299/