就像问题一样,当我使用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
你能告诉我为什么这两者有所不同吗?我以为它们应该是一样的。
答案 0 :(得分:3)
由于对齐和人体工程学调整,实际堆大小可能与用户在命令行中指定的大小不同。默认情况下,堆是2MB对齐(see collectorPolicy.cpp)。
1044381696是104MB86336的2MB对齐后的最终堆大小。