CMS并发标记与并发清理导致的浮动垃圾与并发失败问题

一、CMS垃圾回收原理图:

在这里插入图片描述

注:图中多个CPU只是模拟多个线程工作,事实上并发是指一个CPU内多个线程同时参与争夺CPU时间片的过程。在初始标记阶段,只有用于垃圾回收的线程在运行,其他用户线程阻塞状态。但在并发标记与并发清理阶段,垃圾回收的线程与未用于垃圾回收的其他用户线程一起工作,于是有了无法清理浮动垃圾与并发失败问题:

1.无法清理浮动垃圾:

在CMS的并发标记和并发清理阶段,用户线程还在继续运行,就还会伴随有新的垃圾对象不断产生,但这一部分垃圾对象是出现在标记过程结束以后,CMS无法在当次收集中处理掉它们,只好留到下一次垃圾收集时再清理掉。这一部分垃圾称为“浮动垃圾”。

2. 并发失败:

由于在垃圾回收阶段用户线程还在并发运行,那就还需要预留足够的内存空间提供给用户线程使用,因此CMS不能像其他回收器那样等到老年代几乎完全被填满了再进行回收,必须预留一部分空间供并发回收时的程序运行使用。默认情况下,当老年代使用了 92% 的空间后就会触发 CMS 垃圾回收,这个值可以通过 -XX**😗* CMSInitiatingOccupancyFraction 参数来设置。

二、要注意区分并发与并行的区别:

1.并行清理只是一个概念,是指多个垃圾回收线程同时运行,来清理垃圾,此时没有任何用户线程处于工作状态:

在这里插入图片描述

2. 而并发清理是只有一个垃圾回收线程运行,其他用户线程依然处于工作状态,并会源源不断地产生浮动垃圾,CMS中的就是并发清理:

在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

征程123

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

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

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

打赏作者

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

抵扣说明:

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

余额充值