CMS与G1垃圾回收器

  1. 串行化
    在垃圾回收线程执行时,其他用户线程全部阻塞;
    新生代:「复制」;老年代:「标记-整理」
    在这里插入图片描述
  2. 并行:吞吐量优先
    全部线程并行的进行垃圾回收,期间没有用户线程;
    新生代:「复制」;老年代: 并行的「标记-整理」
    在这里插入图片描述

一、CMS垃圾回收器:响应时间优先

在这里插入图片描述
新生代:「复制」;老年代: 并发「标记-清除」
优点:
由于是并发标记和并发回收,因此全局响应时间快;
缺点:
1)并发回收导致 「CPU资源紧张」 ,CMS默认启动的回收线程数:(CPU核数 + 3) / 4;
2)无法清理并发回收阶段产生的 「浮动垃圾」 ,只能等到下次GC时回收;
3)由于是标记-清除算法,所以会产生 「内存碎片」 ;
4)有 「并发失败」 的风险。因为在并发回收阶段,其他用户线程也会创建新的对象,因为不能等到老年代空间满的时候才Full GC,要预留出一部分空间给其他用户线程创建的对象分配内存。由于标记清除,如果预留的连续空间不足,则GC并发失败,此时就会「CMS」就会退化为「串行化Full GC」,用户线程将全部被阻塞,然后用标记整理算法进行回收,性能会大幅度下降;
在这里插入图片描述
注:对于第二步并发标记与第三步重新标记:
2.并发标记
在进行并发标记的过程中,我们的用户线程和CMS线程会一起执行。CMS所做的一件事情就是把堆里的所有引用对象全部找到并做标记。
但是在这个过程中可能会发生对象状态被改变的问题。
比如我的一个对象的引用链已经断开,变成了垃圾对象,但是CMS已经对他做过标记判断为非垃圾对象了怎么办?(多标问题)
又比如本来一个对象在CMS标记的过程中把他标记成了垃圾对象但是后来我们有引用了,结果在我们用的时候垃圾对象已经被干掉了,那我们是不是在引用这个对象的时候就会找不到这个垃圾对象。这时候我们的第三步就产生了。(漏标问题)

3.重新标记
在这一步,CMS会触发STW机制,并修复并发标记状态已经改变的对象,但是这个过程会比较漫长。他利用三色标记和增量更新来解决我们的漏标问题,之后我会讲讲三色标记和增量更新并通过Hotspot源码来让大家对底层有一个更加深入的了解。

二、G1垃圾回收器

G1垃圾回收器回收的总体过程:他把整个 G1 的垃圾回收阶段分成了这么三个,第一个叫 Young Collection,就是对新生代的垃圾收集,第二个阶段呢叫 Young Collection + Concurrent Mark,
就是新生代的垃圾收集同时呢会执行一些并发的标记,这是第二个阶段,第三个阶段呢它叫 Mixed Collection 混合收集,那这三个阶段呢它是一个循环的过程,刚开始是这个新生代的垃圾收集,经过一段时间,当老年代的内存超过一个阈值了,那么它会在新生代垃圾收集的同时呢进行并发的标记,等这个阶段完成了以后,它会进行一个混合收集,混合收集它就是会对新生代、幸存区还有老年代都来进行一个规模较大的一次收集,等内存释放掉了,混合收集结束,这时候伊甸园的内存都被释放掉,它会再次进入新生代的一个垃圾收集过程,这是一个循环的过程。

算法: 从「整体」来看是「标记-整理」算法,从「局部」(两个Region之间)来看是「标记-复制」算法;
优点: 由于其「全局并发标记,以及「停顿预测模型」,可以使G1垃圾回收器能够同时兼顾「吞吐量优先」与「响应时间优先」的特点
停顿预测模型: G1会在垃圾回收时,会计算出本次回收每个region的回收价值(回收时间、可回收空间等)并维护一个优先列表,每次回收时都优先将回收价值最大的区域回收掉,根据该停顿预测模型,可以将STW时间控制在我们的目标暂定时间内;
Region模型:
1)新生代:由不连续的Eden区和不连续的幸存区组成,由于空间不连续,故新生代在调整大小时很容易;
2)老年代:由老年区和巨型区(humongous)组成,巨型区用于存储巨大对象(标准region大小的50%)
注: 巨型区是由一组连续的H区组成的,它的作用是:让大对象直接进入老年代,避免了大对象在新生代中反复的迁移(复制清理的过程)
在这里插入图片描述

阶段1:G1—Young GC回收

在这里插入图片描述

阶段2:全局并发标记 + 筛选回收

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

阶段3:Mixed GC

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

三、G1垃圾回收器与CMS垃圾回收器的区别?

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

征程123

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值