一.垃圾收集器之间的联系
其中,连线之间代表能够相互配合使用
二.新生代垃圾收集器介绍
1.serial收集器(-XX:+UserSerialGC,复制算法)
(1)java最基础也是最基本的收集器
(2)单线程收集,进行垃圾收集时,必须暂停所有的工作线程
(3)简单高效,client模式下默认的年轻代收集器
2.ParNew收集器(-XX:+UserParNewGC,复制算法)
(1)多线程收集,其余的行为,特点和serial收集器一样
(2)单核执行效率不如serial。在多核下执行才有优势
3.Parallel Scavenger收集器(-XX:+UserParallelGC,复制算法)
(1)比起关注用户线程停顿时间,更关注系统的吞吐量
(2)在多核下执行有优势,server模式下默认的年轻代收集器
三.老年代垃圾收集器介绍
1.Serial Old收集器(-XX:+UserSerialOldGC,标记-整理算法)
(1)单线程收集,进行垃圾收集时,必须暂停所有工作线程
(2)简单高效,Client模式下默认的老年代收集器
2.Parallel Old收集器(-XX:+UserParallelOldGC,标记-整理算法)
(1)多线程,吞吐量优先
3.CMS收集器(-XX:+UserConcMarkSweepGC吗,标记-清除算法)
CMS收集器是一种以获取最短回收停顿时间为目标的收集器,能够加快响应速度,系统停顿时间短,给用户带来较好的体验。
CMS收集器执行流程
(1)初始标记:stop the world
(2)并发标记:并发追溯标记,程序不会停顿
(3)重新标记:暂停虚拟机,扫描CMS堆中的剩余对象
(4)并发清理:清理垃圾对象,程序不会停顿
CMS收集器缺点:
(1)CMS收集器对CPU资源敏感
(2)CMS收集器无法处理浮动垃圾
(3)CMS收集器采用标记-清除算法,会产生大量空间碎片
四.G1垃圾收集器介绍
1.Garbage First收集器(-XX:+UserG1GC,复制+标记-整理算法)
特点:
(1)并发和并行
(2)分代收集
(3)空间整合
(4)可预测的停顿
原理:
(1)将整个java堆内存分成多个大小相等的Region
(2)年轻代和老年代不再物理隔离
五.垃圾收集器的未来
JDK11将会推出比较牛逼的垃圾回收器Epsilon GC和ZGC,敬请期待