Java CMS(Concurrent Mark Sweep)垃圾回收器是一种并发收集器,它的执行流程分为两个阶段:年轻代垃圾回收(Young Generation Collection,YGC)和老年代垃圾回收(Full Generation Collection,FGC)。

  1. YGC执行流程:

(1)初始标记(Initial Mark):暂停所有应用线程,标记所有年轻代中的根对象,并记录其直接引用的对象,这个过程是短暂的。

(2)并发标记(Concurrent Mark):同时执行的其他线程标记剩下的对象,这个过程是和应用线程并发执行的。

(3)重新标记(Remark):当并发标记完成后,暂停应用线程,重新标记所有在并发标记期间被修改过的对象,并记录其直接引用的对象。

(4)并发清理(Concurrent Sweep):同时执行的其他线程清理标记为垃圾的对象,这个过程是和应用线程并发执行的。

  1. FGC执行流程:

FGC是对整个堆进行垃圾回收的过程,它的执行流程分为以下几个步骤:

(1)初始标记(Initial Mark):暂停所有应用线程,标记所有老年代中的根对象,并记录其直接引用的对象,这个过程是短暂的。

(2)并发标记(Concurrent Mark):同时执行的其他线程标记剩下的对象,这个过程是和应用线程并发执行的。

(3)重新标记(Remark):当并发标记完成后,暂停应用线程,重新标记所有在并发标记期间被修改过的对象,并记录其直接引用的对象。

(4)并发清理(Concurrent Sweep):同时执行的其他线程清理标记为垃圾的对象,这个过程是和应用线程并发执行的。

(5)并发重置(Concurrent Reset):重置堆的内部数据结构,为下一次垃圾回收做好准备,这个过程也是和应用线程并发执行的。

总的来说,CMS垃圾回收器通过并发执行来减少了垃圾回收对应用线程的影响,提高了应用程序的响应速度和吞吐量。但是,由于并发执行需要占用一定的CPU资源,因此CMS垃圾回收器在高并发场景下可能会导致应用程序的性能下降


原文地址: https://www.cveoy.top/t/topic/fF5y 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录