详细介绍一下 CMS 垃圾回收器?

CMS(Concurrent Mark-Sweep)垃圾回收器是Java虚拟机(JVM)中的一种垃圾回收器,主要用于追求低停顿的场景。以下是关于CMS垃圾回收器的详细介绍:

  1. 基本原理:
  • CMS垃圾回收器采用标记清除算法。这个算法主要包括两个阶段:标记阶段和清除阶段。在标记阶段,CMS会识别出哪些对象是可回收的(即垃圾对象);在清除阶段,CMS会清除这些被标记为垃圾的对象,从而释放内存空间。
  • CMS垃圾回收器尝试并发执行应用程序线程和CMS线程,以减少应用程序的暂停时间。在垃圾回收过程中,CMS会尽量与应用程序线程并发执行,以减少对应用程序性能的影响。
  1. 工作过程:
  • 初始标记:在这个阶段,CMS会让系统工作线程全部停止,进入“Stop the World”状态。然后,CMS会标记出所有GC Roots直接引用的对象。这个阶段速度很快,对“Stop the World”的影响不大。
  • 并发标记:在初始标记阶段完成后,CMS会开始并发标记过程。在这个阶段,CMS会与应用程序线程并发执行,标记出所有可达的对象。
  • 重新标记:在并发标记阶段完成后,CMS会再次进入“Stop the World”状态,进行重新标记。这个阶段是为了修正并发标记阶段中可能产生的标记错误。
  • 并发清理:在重新标记阶段完成后,CMS会开始并发清理过程。在这个阶段,CMS会与应用程序线程并发执行,清除被标记为垃圾的对象,释放内存空间。
  1. 特点:
  • 并发收集:CMS垃圾回收器可以与应用程序线程并发执行,从而减少对应用程序性能的影响。
  • 低延迟:CMS的设计目标是减少垃圾回收期间的停顿时间,以便在大型内存堆上运行,并在响应时间敏感的应用程序中使用。
  • 只回收老年代:CMS只会回收老年代和永久代(在JDK 1.8中,永久代被元数据区替代,CMS默认不会对永久代进行垃圾回收),不会收集年轻代。
  1. 优缺点:
  • 优点:并发收集、低延迟。
  • 缺点:会产生内存碎片、对CPU资源敏感、无法处理浮动垃圾。由于CMS采用标记清除算法,会产生内存碎片。此外,在并发阶段,CMS虽然不会导致用户停顿,但是会占用一部分线程资源,导致应用程序变慢,总吞吐量会降低。另外,CMS无法处理浮动垃圾,即在并发标记阶段新产生的垃圾对象可能无法被及时回收。

总的来说,CMS垃圾回收器适用于追求低停顿时间的应用场景,但需要根据具体的应用程序需求和系统环境进行选择和调整。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值