JVM中的MaxHeapSize值不一致问题
查看MaxHeapSize参数值, 我们可以使用两类JVM选项: -XX:+PrintFlagsFinal 和 -XX:+PrintCommandLineFlags. 下面是使用 -XX:+PrintFlagsFinal参数的输出:
[root@localhost ~]# java -XX:+PrintFlagsFinal -version |grep :
uintx InitialHeapSize := 258689024 {product}
uintx MaxHeapSize := 4139778048 {product}
bool PrintFlagsFinal := true {product}
bool UseCompressedOops := true {lp64_product}
bool UseParallelGC := true {product}
第三列”=”表示第四列是参数的默认值,而”:=” 表明了参数被用户或者JVM赋值了。
如果运行 -XX:+PrintCommandLineFlags, 能看到 :
[root@localhost ~]# java -XX:+PrintCommandLineFlags -version
-XX:InitialHeapSize=258689024 -XX:MaxHeapSize=4139024384 -XX:+PrintCommandLineFlags -XX:+UseCompressedOops -XX:+UseParallelGC
你发现了吗?两个MaxHeapSize值不相等, 为什么?
实际的堆大小和用户在命令行指定的大小不一致,是由于校正机制和就近取整
默认情况下,堆是2MB对齐的,也就是说堆的最小分配单元是2MB
来自 -XX:+PrintCommandLineFlags 的 4139024384 经过2MB校正并向上取整后 变为 来自 -XX:+PrintFlagsFinal的4139778048 这是最终的堆大小 .
因为 4139024384 不是 2M对齐的:4139024384 / (2*1024*1024) = 1973.640625. 向上取整后变成1974,所以 4139778048 / (2*1024*1024) = 1974
可以得出最终堆大小为4139778048,和-XX:+PrintFlagsFinal的4139778048一致
[root@localhost ~]# java -XX:+PrintFlagsFinal -version |grep :
uintx InitialHeapSize := 258689024 {product}
uintx MaxHeapSize := 4139778048 {product}
bool PrintFlagsFinal := true {product}
bool UseCompressedOops := true {lp64_product}
bool UseParallelGC := true {product}
第三列”=”表示第四列是参数的默认值,而”:=” 表明了参数被用户或者JVM赋值了。
如果运行 -XX:+PrintCommandLineFlags, 能看到 :
[root@localhost ~]# java -XX:+PrintCommandLineFlags -version
-XX:InitialHeapSize=258689024 -XX:MaxHeapSize=4139024384 -XX:+PrintCommandLineFlags -XX:+UseCompressedOops -XX:+UseParallelGC
你发现了吗?两个MaxHeapSize值不相等, 为什么?
实际的堆大小和用户在命令行指定的大小不一致,是由于校正机制和就近取整
默认情况下,堆是2MB对齐的,也就是说堆的最小分配单元是2MB
来自 -XX:+PrintCommandLineFlags 的 4139024384 经过2MB校正并向上取整后 变为 来自 -XX:+PrintFlagsFinal的4139778048 这是最终的堆大小 .
因为 4139024384 不是 2M对齐的:4139024384 / (2*1024*1024) = 1973.640625. 向上取整后变成1974,所以 4139778048 / (2*1024*1024) = 1974
可以得出最终堆大小为4139778048,和-XX:+PrintFlagsFinal的4139778048一致
声明:该文观点仅代表作者本人,牛骨文系教育信息发布平台,牛骨文仅提供信息存储空间服务。
- 上一篇: JVM HeapSize Permsize
- 下一篇: tp5改写跳转提示页面