调用-XX时,为什么MaxHeapSze的输出不同:+ PrintFlagsFinal和-XX:+ PrintCommandLineFlags?

时间:2014-06-15 06:59:23

标签: jvm

就像问题一样,当我使用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 

你能告诉我为什么这两者有所不同吗?我以为它们应该是一样的。

1 个答案:

答案 0 :(得分:3)

由于对齐和人体工程学调整,实际堆大小可能与用户在命令行中指定的大小不同。默认情况下,堆是2MB对齐(see collectorPolicy.cpp)。

1044381696是104MB86336的2MB对齐后的最终堆大小。