JVM新生代各个区的比例问题

Eden和S0,S1的默认比例是多少?想必大家都说是8:1:1。

但我通过jvivualvm做测试时,发现答案并非这样。

我新生代设为-Xmn512M。 如果是8:1:1的话,那么s0,s1应该是51M,Eden应该是410M。实际上并不是。原因是JVM默认开始了内存分配自适应,也就是这个参数:-XX:+UseSizeAdaptivePolicy。如果要去掉:-XX:-UseSizeAdaptivePolicy。

测试之后,发现仍然不是8:1:1,而是6:1:1。 但通过命令查看默认比例确实是8。  jinfo -flag SurvivorRatio <pid>。此处尚未得到答案???

手动设置:-XX:SurvivorRatio=8, 此时比例才是8:1:1。 

 所以,8:1:1需要在如下情况才成立:

1. 关系内存自适应分配:-XX:-UseSizeAdaptivePolicy

2. 手动设置比例:-XX:SurvivorRatio=8

附上测试命令:

-Xms1024M -Xmx1024M -Xmn512M -XX:-UseAdaptiveSizePolicy -XX:SurvivorRatio=8 -XX:NativeMemoryTracking=detail -XX:+UnlockDiagnosticVMOptions -XX:+PrintTenuringDistribution

猜你喜欢

转载自www.cnblogs.com/lzmrex/p/12336894.html