【问题标题】:Why is output of MaxHeapSze different when calling -XX:+PrintFlagsFinal and -XX:+PrintCommandLineFlags?为什么调用-XX:+PrintFlagsFinal和-XX:+PrintCommandLineFlags时MaxHeapSze的输出不同?
【发布时间】:2014-06-15 06:59:23
【问题描述】:

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

你能告诉我为什么这两个不同吗?我认为它们应该是一样的。

【问题讨论】:

    标签: jvm jvm-arguments


    【解决方案1】:

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

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

    【讨论】:

    • 谢谢。但是 (1044381696-1043086336) 大约是 1.23M,而不是 2M。你怎么看?
    • @PixelsTech 1043086336 不是 2M 对齐的,即 X / (2*1024*1024) = 497.38 - 小数。最接近它的 2M 倍数是 1044381696:X / (2*1024*1024) = 498。
    • 太棒了。谢谢你的回答
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-08-08
    • 2017-04-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-07-30
    相关资源
    最近更新 更多