-XX:NewSize -XX:MaxNewSize -XX:NewRatio
年轻代大小的上限和下限,年轻代是不允许比老年代大的,因为极端情况下有可能需要将年轻代的所有对象移入到老年代,所以-XX:MaxNewSize
的上限是-Xmx/2
,-XX:NewRatio
提供了一个相对于老年代来设定年轻代的方法,-XX:NewRatio=2
即表示老年代与年轻代的比例是2:1,即年轻代的大小是1/3堆。
如果我们同时设定绝对值和相对值,则可以为相对值设定一个上限和下限,如-XX:NewSize=100m -XX:MaxNewSize=1024m -XX:NewRatio=3
,意思为设定年轻代为总堆的1/4,但是上限和下限分别为1024m和100m。
-XX:SurvivorRatio
年轻代幸存区占年前代的比例,例如-XX:SurvivorRatio=8
则是设置Eden区域与幸存区的比例为8,因为有两个幸存区,则eden:from:to的比例是8:1:1。
-XX:+PrintTenuringDistribution
每次ygc时打印幸存空间中包含的所有对象的年龄分布。例:
[ParNew
Desired survivor size 107347968 bytes, new threshold 3 (max 3)
- age 1: 607728 bytes, 607728 total
- age 2: 120 bytes, 607848 total
- age 3: 808 bytes, 608656 total
-XX:InitialTenuringThreshold -XX:MaxTenuringThreshold -XX:TargetSurvivorRatio
InitialTenuringThreshold
和MaxTenuringThreshold
是年轻代晋升老年代经历ygc次数阈值的初始值和最大值,当然这个值jvm会在gc的过程中不断调整,这里只是设置边界值而已。TargetSurvivorRatio
则是指定动态计算新阈值的时机,默认是50%。
-XX:+NeverTenure and -XX:+AlwaysTenure
两个测试性标志,NeverTenure
是使年轻代永远不要晋升,AlwaysTenure
则相反,是年轻代的对象直接晋升到老年代,这个标志会导致幸存区无用,所有对象经过一次ygc后直接晋升进老年代。这两个标志基本不会用到,如果你想用,最好先反思下能否从代码上解决问题。
-XX:+-UseAdaptiveSizePolicy
动态计算新生代eden和幸存区大小,这个参数在jdk8开启CMS垃圾回收器时是默认关闭且无法开启的,大多数情况不用考虑。