JVM 垃圾收集器

文章介绍了Java中的垃圾收集器,包括串行收集器Serival+SerivalOld,使用单线程进行GC,存在STW问题;并行收集器ParallelScavenge+ParallelOld,多线程处理,同样有STW;以及并发收集器ParNew+CMS,CMS允许在垃圾收集时执行其他线程,但可能产生浮动垃圾。CMS的四个阶段包括初始标记、并发标记、重新标记和并发清理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

  • 串行收集: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,这个过程会产生垃圾--浮动垃圾

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值