JVM系列 - CMS收集器
Publish date: Oct 139, 13039
Last updated: Oct 289, 28089
Last updated: Oct 289, 28089
目标
CMS 收集器的目标是获取 最短回收停顿时间
适合场景:关注服务的响应速度
阶段
- 初始标记(initial mark):仅标记与 GC Roots 直接关联的对象,速度很快
- 并发标记(concurrent mark):从直接关联对象遍历整个对象图
- 重新标记(remark):修正并发标记期间,标记产生变动的对象的标记记录
- 并发清除(concurrent sweep):清理被标记为死亡的对象
1、3 阶段需要 Stop The World,但时间很短,速度很快
2、4 阶段耗时很长,但是与用户线程并发执行
缺点
- 对处理器资源敏感:需要占用处理器的计算能力,导致应用程序变慢
- 无法处理 “浮动垃圾”:重新标记阶段用户线程产生的垃圾,只能等下次回收
- 内存碎片问题:大对象分配困难,无法找到空间,进而触发 Full GC