Java的CMS垃圾回收流程

1.初始标记(initial mark)

CMS会标记所有根对象直接可达的对象。

2.并发标记(Concurrent marking)

并发标记阶段,垃圾收集器和应用程序并发执行,从根对象直接可达的对象开始进行tracing,递归的扫描所有可达对象。

3.并发预清理(Concurrent precleaning)

并发预清理阶段会先分担一些重新标记阶段的工作,扫描卡表脏的区域以及新晋升到老年代的对象。

4.可中断的预清理阶段(AbortablePreclean)

可中断的预清理阶段也是先分担一些重新标记阶段的工作,和并发预清理阶段不同的是这个阶段可以中断。

5.重新标记(remark)

因为前几个并发阶段会导致引用关系发生变化,所有需要重新遍历一遍新生代对象、GC Roots和卡表等,从而对标记进行修正,需要花较长的时间来进行重新扫描。

6.并发清理(Concurrent Sweeping)

并发清理阶段,标记为不可达的对象会被清理。

7.并发重置(Concurrent Reset)

重置CMS内部的状态。

相关推荐
dishugj2 小时前
HANA集群计划内切换与维护操作
java·linux·数据库
yuniko-n2 小时前
【JUC】线程间通信
java·开发语言
yuniko-n2 小时前
【JUC】关于 Java 线程介绍
java·开发语言
HelloWorld工程师2 小时前
@Primary 注解
java·spring
geovindu2 小时前
rust: Borg Pattern(续)
开发语言·后端·设计模式·rust·博格模式
aqiu1111114 小时前
【C++算法打怪专栏】8. 字符串转换整数 (atoi)
开发语言·c++·算法
爱吃香菜的初学者4 小时前
十四.Linux——消息队列
linux·运维·开发语言
迅猛龙办公室4 小时前
python实现倒序输出数字
开发语言·python
夏幻灵10 小时前
JavaScript this 面试:五种绑定规则、优先级与常见面试陷阱
开发语言·javascript·面试
程序猿编码10 小时前
榨干 RTX5090 算力!Qwen3 专用单卡推理引擎,手写C++/CUDA 算子实现 MTP 推测解码
开发语言·c++·大模型推理·qwen3·多模态推理