jvm采用分代回收 标记清除机制
大部分的对象生命周期非常短,所以堆内存分为新生代和老年代,
新生代分为Eden区和两个survivor区s0 s1
新生代内存不足触发ygc,将Eden区的存活对象复制到s0区,
下一ygc 将同时回收Eden和s0区的对象,将存活对象复制到s1区,同时清空Eden和s0
每经过一次ygc,存活的对象年龄+1,达到年龄阈值的对象被复制进老年代中
或者survivor中的内存不足时将有部分对象进入老年代
大对象直接分配到老年代中
ygc时 survivor中不足以存放对象
ygc时存活对象年龄达到了设定阈值
survivor中相同年龄的对象占到一半,大于此年龄的对象将进入老年代
FGC会同时清理新生代和老年代
相比于cms收集器 ,G1收集器可用同时作用于新生代和老年代,G1堆内存在传统分区的基础上将内存进一步分为多个分区
每次触发gc会优先清理回收价值比较高的分区,可以有效减少gc时间
参考原文 https://mp.weixin.qq.com/s/P8s3kuceBNovUP5adXpFCQ
原文:https://www.cnblogs.com/cu-later/p/14616514.html