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内部的状态。

相关推荐
皮皮林5514 小时前
Java性能调优黑科技!1行代码实现毫秒级耗时追踪,效率飙升300%!
java
冰_河5 小时前
QPS从300到3100:我靠一行代码让接口性能暴涨10倍,系统性能原地起飞!!
java·后端·性能优化
桦说编程7 小时前
从 ForkJoinPool 的 Compensate 看并发框架的线程补偿思想
java·后端·源码阅读
躺平大鹅9 小时前
Java面向对象入门(类与对象,新手秒懂)
java
初次攀爬者10 小时前
RocketMQ在Spring Boot上的基础使用
java·spring boot·rocketmq
花花无缺10 小时前
搞懂@Autowired 与@Resuorce
java·spring boot·后端
Derek_Smart11 小时前
从一次 OOM 事故说起:打造生产级的 JVM 健康检查组件
java·jvm·spring boot
NE_STOP12 小时前
MyBatis-mybatis入门与增删改查
java
孟陬16 小时前
国外技术周刊 #1:Paul Graham 重新分享最受欢迎的文章《创作者的品味》、本周被划线最多 YouTube《如何在 19 分钟内学会 AI》、为何我不
java·前端·后端