CMS全称Concurrent Mark Swap ,并发标记清除。是一种以获取最短回收停顿时间为目标的收集器。
使用的GC算法:标记-清除
处理过程:
初始标记~并发标记~重新标记~并发清除
从图中可见,初始标记和重新标记阶段“stop the word”,需要暂停所用用户线程,但是时间短。
而并发标记和并发清除可以和用户线程一起工作,耗时较多。
1、初始标记
初始标记阶段,仅仅是标记GC Roots能直接关联的对象,速度很快。stop the word。
2、并发标记
并发标记阶段,实行 RC Roots 跟踪,标记RC Roots间接关联的对象。与用户线程并行。
3、重新标记
重新标记阶段,主要修正在并发标记阶段因为用户线程继续运行而导致标记记录产生变动的那一部分对象的标记记录。stop the word,时间不长。
4、并发清除
并发清除阶段,干掉垃圾对象。与用户线程并行。
优缺点:
优点:并发清理,低停顿。
缺点:
1、因为并行设计,对CPU资源很敏感。会占用部分资源,导致应用程序变慢,吞吐量下降。
2、无法清理浮动垃圾,可能出现“Concurrent Mode Failure”失败而导致另一次Full GC的产生。并发清理阶段用户线程同时在运行,这阶段产生的垃圾叫做浮动垃圾。
3、容易产生内存空间碎片。这是GC算法标记-清理的缺点所致。