分代理论基于两个假说:
弱分代假说:大多数对象都在年轻时死亡;
强分代假说:对象越老越不容易死;
跨分代假说:跨代引用是极少数;
这是理论研究与实践的产出物,尽管部分还存在争议。
年轻与年老的判别依据是年龄,而分代垃圾收集理论中的年龄就是躲过了几次垃圾收集,这样统计比较方便。
年轻代与老年代有不同的特征,必然是适用于不同的算法,所以通常都是划分成为多个空间,针对不同的空间进行垃圾回收。
分代收集的主要关注点
内存划分
区域分为:
Eden 、Survivor0 、Survivor1 、Old
通过jstat 命令可以间接验证
#4093 是java进程
root@ecs-master:/usr/local/java/jdk1.8.0_333/bin# jstat -gc 4093
S0C S1C S0U S1U EC EU OC OU MC MU CCSC CCSU YGC YGCT FGC FGCT GCT
1536.0 1536.0 0.0 1178.2 259072.0 30539.5 262144.0 155371.3 81536.0 77754.4 10112.0 9494.5 2817 20.080 3 0.432 20.512
S0C:第一个幸存区的大小
S1C:第二个幸存区的大小
S0U:第一个幸存区的使用大小
S1U:第二个幸存区的使用大小
EC:伊甸园区的大小
EU:伊甸园区的使用大小
OC:老年代大小
OU:老年代使用大小
MC:方法区大小
MU:方法区使用大小
CCSC:压缩类空间大小
CCSU:压缩类空间使用大小
YGC:年轻代垃圾回收次数
YGCT:年轻代垃圾回收消耗时间
FGC:老年代垃圾回收次数
FGCT:老年代垃圾回收消耗时间
GCT:垃圾回收消耗总时间
|