描述一下常见的垃圾回收器

一般就七种垃圾收集器:Serial、ParNew、Parallel Scavenge、Parallel Old、Serial Old、 CMS、G1。

Serial收集器:单线程的收集器,在垃圾回收的时候必须停止其他所有的工作线程,垃圾收集效率高,年轻代采用复制算法。

Serial Old收集器:单线程、效率高、发生在serial的老年代区域,采用标记-整理算法。

ParNew收集器:Serial收集器的多线程版本,多条线程垃圾回收,其他与Serial相同,只有ParNew收集器可以与CMS收集器配合使用。

Parallel Scavenge收集器:年轻代收集器、多线程并发收集,使用复制算法,是ParNew的升级版,CMS、ParNew、serial收集器的目标都是:尽可能缩短用户线程的停顿时间,但是Parallel Scavenge的目标是:实现一个可控的吞吐量(CPU运行代码的时间/cpu总消耗的时间),具有GC自适应的调节策略,以达到可控吞吐量,这是与ParNew最大的区别。

Parallel Old收集器:Parallel Scavenge的老年代版本。

CMS收集器:是一种获取最短回收停顿时间为目标的收集器。CMS是基于标记-清除算法实现的。包括四个步骤:初始标记、并发标记、重新标记、并发清除。初始标记只是标记了一下gcroots直接关联的对象,速度很快;并发标记是从gcroots开始向下进行标记;重新标记是重新标记那些在并发标记的过程中发生变化的标记,这个阶段的时间要比初始标记长,但是比并发标记阶段时间短;并发清除是清除老年代中的垃圾。CMS优点:并发收集、低停顿。CMS缺点:1. 采用标记清除算法(老年代唯一使用这个的)会产生大量的内存碎片。2. 无法处理浮动垃圾(浮动垃圾:在并发清除时,用户线程还在运行,还好产生新的垃圾,这部分只能下次GC的时候清理)。3. CMS收集器对CPU非常敏感:由于CMS在GC的时候,最耗时的并发标记和并发清除是与用户线程同时执行的,因此可以降低停顿时间,但是并发标记会占用一部分cpu资源,导致应用程序变慢。

G1收集器:唯一一个可以同时用于年轻代与老年代的垃圾收集器。G1收集器采用垃圾-整理算,避免了内存碎片。使用G1收集器时,堆的内存布局就发生了变化,将堆分为不同的大小相等的region,G1追踪每个region的垃圾堆的价值大小,然后有一个优先列表,优先回收价值最大的region,避免在整个堆中进行全区域的垃圾收集,能建立可预测的停顿时间模型。整个过程包括四个步骤:初始标记、并发标记、最终标记、筛选回收。初始标记与并发标记与CMS相似;最终标记:将在并发标记阶段那些发生变化的对象的变化记录写入线程Remembered set log,最终标记阶段需要把Remembered set log中的数据合并到Remembered set中;筛选回收:通过对每个region的价值和成本进行筛选,以得到一个最好的回收方案并回收。

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值