当前位置: 首页 > 图灵资讯 > java面试题> 金三银四精选java面试题-能详细说一下 CMS 收集器的垃圾收集过程吗?

金三银四精选java面试题-能详细说一下 CMS 收集器的垃圾收集过程吗?

来源:图灵教育
时间:2023-11-29 09:30:52
 

能详细说一下 CMS 收集器的垃圾收集过程吗?

CMS收集器是一种旨在减少垃圾回收停顿时间的垃圾收集器。它主要针对响应时间敏感的应用程序,通过并发执行大部分垃圾收集工作来减少停顿时间。

CMS收集器的垃圾收集过程主要分五个阶段:

  1. 初始标记阶段:
    • 在此阶段,CMS收集器会标记所有从根对象直接可达的对象,标记这些对象的标记位。
    • 标记过程需要停止应用程序的线程,因此会产生短暂的停顿
  1. 并发标记阶段:
    • 在初始标记阶段之后,CMS收集器会启动并发标记阶段,恢复应用程序的执行。
    • 在并发标记阶段,CMS收集器会遍历堆中的对象,并标记那些在垃圾回收过程中变得不可达的对象。标记过程与应用程序的执行并发进行
  1. 重新标记阶段:
    • 在应用程序继续执行的同时,CMS收集器会暂时停止应用程序的线程,进行重新标记阶段。
    • 重新标记阶段的目的是标记在并发标记期间发生变化的对象
    • 该阶段通常比初始标记阶段稍长。
  1. 并发清理阶段:
    • 在重新标记阶段之后,CMS收集器会启动并发清理阶段,恢复应用程序的执行。
    • 在并发清理阶段,CMS收集器会清理那些被标记为垃圾的对象。清理过程与应用程序的执行并发进行
  1. 并发重置阶段:
    • 最后一个阶段是并发重置阶段。在此阶段,CMS收集器完成垃圾回收过程的最后一些清理工作
    • 该阶段通常很快,并在其中释放额外的内存空间。

值得注意的是,CMS收集器的并发标记和清理过程与应用程序的执行是同时进行的,因此它可以显著减少垃圾回收引起的停顿时间。然而,CMS收集器的缺点之一是其在执行垃圾收集时会消耗一定的CPU资源,并且在堆内存使用率高或产生大量垃圾时,可能会导致更频繁的Full GC操作。