JVM | MaxNewSize 和 NewRatio 哪个优先级更高 ?

不熟悉 JDK 源码, 直接做实验看结果 :

同时设置 MaxNewSize 和 NewRatio


java -Xms200m -Xmx200m -XX:NewSize=100m -XX:MaxNewSize=100m -XX:NewRatio=3 ...

jstat -gccapacity 74825
NGCMN NGCMX NGC S0C S1C EC OGCMN OGCMX OGC OC PGCMN PGCMX PGC PC YGC FGC
102400.0 102400.0 102400.0 12800.0 12800.0 76800.0 102400.0 102400.0 102400.0 102400.0 � � � � 0 0

可以看到 100MB, 而非 1/4, 因此 MaxNewSize 优先级高于 NewRatio.

不设置 NewSize


java -Xms200m -Xmx200m -XX:NewRatio=3 ...

jstat -gccapacity 78462
NGCMN NGCMX NGC S0C S1C EC OGCMN OGCMX OGC OC PGCMN PGCMX PGC PC YGC FGC
51200.0 51200.0 51200.0 6144.0 6144.0 38912.0 153600.0 153600.0 153600.0 153600.0 � � � � 0 0

当没有设置 NewSize/MaxNewSize 时, 会采用 NewRatio 的值.

参考


The Second Most Important GC Tuning Knob | Oracle Jon Masamitsu's Blog