案例1
配置
-Xmx2000m -Xms2000m -XX:NewRatio=4 -XX:SurvivorRatio=4
jstat
bash-4.3$ jstat -gc 18
S0C S1C S0U S1U EC EU OC OU MC MU CCSC CCSU YGC YGCT FGC FGCT GCT
27136.0 21504.0 0.0 0.0 360448.0 281363.1 1638400.0 31395.9 59028.0 55343.1 7680.0 6936.1 7 0.258 3 0.384 0.641
年轻代大小:S0C+S1C+EC=409 088
年老代大小:OC=1638400
HEAP:409088+1638400=2 047 488=1.95G
NewRatio:1638400/409 088=4
SurvivorRatio:ec/sc=360448/27136=13
分析
在jdk8中自动开启了AdaptiveSizePolicy,故eden区和survivor区大小会自动调整,而年轻代和年老代大小是不会变的
案例2
-Xmx2000m -Xms2000m -XX:NewRatio=4 -XX:SurvivorRatio=4 -XX:-UseAdaptiveSizePolicy
jstat
S0C S1C S0U S1U EC EU OC OU MC MU CCSC CCSU YGC YGCT FGC FGCT GCT
68096.0 68096.0 6288.2 0.0 273408.0 168008.0 1638400.0 31437.6 66048.0 61993.1 8448.0 7686.6 8 0.147 3 0.355 0.502
SurvivorRatio:ec/sc=273408/68096=4
当关闭自适应后SurvivorRatio的比例不在调整
附
jstat -gc 输出
S0C:第一个幸存区的大小
S1C:第二个幸存区的大小
S0U:第一个幸存区的使用大小
S1U:第二个幸存区的使用大小
EC:伊甸园区的大小
EU:伊甸园区的使用大小
OC:老年代大小
OU:老年代使用大小
MC:方法区大小
MU:方法区使用大小
CCSC:压缩类空间大小
CCSU:压缩类空间使用大小
YGC:年轻代垃圾回收次数
YGCT:年轻代垃圾回收消耗时间
FGC:老年代垃圾回收次数
FGCT:老年代垃圾回收消耗时间
GCT:垃圾回收消耗总时间