一、工作过程
初始标记->并发标记->重新标记->并发清理

介绍:并发gc垃圾收集器,gc算法是标记清除,工作在老年代
优点:并发收集,低停顿
缺点:占用cpu资源,无法处理浮动垃圾,出现Concurrent Mode Failure,空间碎片
二、cms收集详解
cms收集过程如下:
初始标记:这一步作用是标记存活的对象,有两部分:
1.标志老年代中所有GC roots对象,如下图节点1;
2.标记年轻代中活着的对象引用到的老年代的对象,如下图节点2、3;

并发标记:从“初始标记”阶段标记的对象开始找出所有存活的对象(由于并发标记和用户线程是并发工作的,这个阶段也会产生垃圾,所有存在某些存活的对象没有标记上);

预清理阶段:这个阶段就是用来标记前一个阶段因为引用关系改变导致没有标记到的存活的对象(目的就是把前阶段的丢的垃圾标记,相当于标记脏数据),目的是为了让重新标记阶段STW(stop the world)尽可能短。

重新标记:该阶段的任务是完成标记整个老年代的所有存活对象。
并发清理:这个阶段主要是清除那些没有标记的对象并且回收空间。
网友评论