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