-XX:NewRatio和-XX:OldSize JVM标志的含义是什么?

24

我使用以下命令行启动我的Java应用:

java -XX:+PrintCommandLineFlags -verbose:gc -XX:+PrintGCDetails \
     -XX:+UseConcMarkSweepGC -jar start.jar

JVM可以启用以下选项:

-XX:MaxNewSize=87244800 -XX:MaxTenuringThreshold=4 -XX:NewRatio=7
-XX:NewSize=21811200 -XX:OldPLABSize=16 -XX:OldSize=65433600
-XX:+PrintCommandLineFlags -XX:+PrintGC -XX:+PrintGCDetails
-XX:+UseCompressedOops -XX:+UseConcMarkSweepGC -XX:+UseParNewGC

有人能解释一下NewRatio和OldSize的含义吗?特别是OldSize是老年代初始大小吗?

2个回答

27

3
文档中写道:“新/旧代大小的比率。默认值为2。”那么,2是否意味着新生代的大小是老生代的两倍大? - DeepNightTwo
@DeepNightTwo 很好的观点。我不确定。我需要运行它并检查一下。我原以为是相反的情况。 - Peter Lawrey
4
我用JVisualVM的VisualGC插件进行了验证,发现-XX:NewRatio值越大,“老年代”大小就越大,因此比值中分子应该是“老年代”,而不是分母。(测试环境为Sun HotSpot JVM版本1.6.0_45。) - Jim Pivarski
4
本周我也与Oracle的人员确认了,使用比率无法使新大小大于旧大小。 - Peter Lawrey
然而,根据此文档,"...,设置-XX:NewRatio=3意味着老年代和年轻代之间的比例为1:3"。 - wings
2
@wings 看起来有些困惑,因为接下来说到了“伊甸园区和幸存者空间的总大小将占用堆内存的四分之一。”也就是说老年代与新生代的比例为3:1,使得年轻代占用堆内存的四分之一。此外,“服务器JVM的默认NewRatio为2:其中老年代占用堆内存的三分之二,而新生代占用堆内存的三分之一。” - Peter Lawrey

1

由于NewRatio已经有很好的解释,接下来的内容应该有助于理解OldSize。

这里,OldSize => 老年代的默认大小。这是老年代的默认大小,直到启用人体工效学为止。


这是否意味着尺寸会从那里增长?你有任何关于OldSize的链接可以参考吗?谢谢。 - Kin Cheung
不记得它只增长还是也会减少了。那是很久以前的事了。抱歉。 - Khanna111

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接