串行收集:Serival + Serival Old
并行收集:ParallelScavenge + ParallelOld(JDK8默认的收集器) -XX:+UseParallelGC
并发收集:ParNew + CMS

串行收集:Serival + Serival Old

Serival:年轻代,单线程GC清理,存在STW问题(stop the world)其他线程等待GC的清理。采用copy算法。
ServivalOld:老年代,单线程GC清理,存在STW问题,采用标记压缩算法。
并行收集:ParallelScavenge + ParallelOld (PS + PO)

ParallelScavenge:年轻代,多线程GC清理,同样存在STW问题,采用copy算法。
ParallelOld:老年代,多线程GC清理,存在STW,采用标记压缩。
并发收集:ParNew + CMS

ParNew:PS的变种,为了迎合CMS。
CMS:CMS是一个里程碑式的技术,它让垃圾收集的过程同时可以执行其他线程。但是CMS会存在许多问题,会产生浮动垃圾。
CMS过程:
1、初始标记(InitialMark):单线程标记,标记GC Root直接相关联的对象,存在STW
2、并发标记(ConcurrentMark):业务线程执行过程中并发标记GC线程
3、重新标记(Remark):步骤二会产生新的GC,Remark暂停业务线程,标记GC,存在STW
4、并发清理(Concurrent Sweep):执行业务线程同时清理标记的GC,这个过程会产生垃圾--浮动垃圾
文章介绍了Java中的垃圾收集器,包括串行收集器Serival+SerivalOld,使用单线程进行GC,存在STW问题;并行收集器ParallelScavenge+ParallelOld,多线程处理,同样有STW;以及并发收集器ParNew+CMS,CMS允许在垃圾收集时执行其他线程,但可能产生浮动垃圾。CMS的四个阶段包括初始标记、并发标记、重新标记和并发清理。
1756

被折叠的 条评论
为什么被折叠?



