本文重点
在前面的课程中我们学习了Serial和PO垃圾回收器,本文将学习一种新的在老年代使用的垃圾回收器CMS。
特点
CMS收集器是一种以获取最短回收停顿时间为目标的收集器(还是会有短暂的STW),适合互联网或者B/S系统的服务器上,这类应用尤其重视服务器的响应速度,希望系统停顿时间最短。CMS非常适合堆内存大、CPU核数多的服务器端应用,也是G1出现之前大型应用的首选收集器。
运行过程
如图所示,它会经历四个过程:
- 初始标记(CMS initial mark),会有短暂的停顿,标记GC Roots直接关联的对象
- 并发标记(CMS concurrent mark)和用户线程一起,标记全部对象(最耗时)
- 重新标记(CMS remark),会有短暂的停顿,这个过程会修正由于用户程序继续运行而导致标记产生变动的那一部分对象的标记记录
- 并发清除(CMS concurrent sweep)和用户线程一起,清除GC不可达的对象,直接基于标记结果,直接清除对象。
有点
CMS的优点:并发收集停顿低
缺点
浮动垃圾
内存碎片
浮动垃圾