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

标签 jvm jvm-arguments

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

相关文章:

java - 在最近的 JVM 中,不可见的引用仍然是一个问题吗?

java - 为什么我的 JBoss 包装应用程序 JVM 会重新启动?

java - 尽管 RAM 显示 6 GB 可用空间,但 Java 运行时环境的内存不足无法继续

java - ANT 将 javax.net.ssl.trustStore 传递给 "compilerarg"或将其用作 "sysproperty"

java - log4j2 配置中的用户 JVM 参数

java - ThreadPoolExecutor.execute() 的内存可见性保证

grails - 为什么这么多人坚持将 JVM 拖到新的应用程序中?

java - 获取 JVM 方法调用

java - Tomcat 替换 VM 参数

JVM HotSpot 上的 Java 异常计数器