前言
cms是一个基于 标记-清除 算法的老年代垃圾回收器,综合考虑多方因素结合多个垃圾回收算法组成的,适用场景:重视服务器响应速度,要求系统停顿时间最短。这里要说明以下,这是一个老年代算法,年轻代怎么处理?不回收了嘛?这里其实年轻代是采用的其它算法,具体看策略,Java 参数可以选择策略。这里下文也会涉及到。
流程
- 1、初始标记(CMS initial mark)
“Stop The World”,仅仅只是标记一下 GC Roots 能直接关联到的对象,也就是根集合可直接到达的对象,但不会直接到叶子节点,还有遍历新生代对象,标记可达的老年代对象;速度很快。
这些灰色的节点就是初始标记的节点。
-
2、并发标记(CMS concurrent mark)
进行 GC RootsTracing 的过程,继续递归标记这些对象可达的对象,做可达性分析等
-
3、重新标记(CMS remark)<