前言
垃圾收集器,首先要有个这样认知现有的所有垃圾回收方案中,没有任何一种是不需要停顿,只是停顿的时间长短不同而已
什么是CMS
CMS(Concurrent Mark Sweep)基于标记—清除算法实现的并行垃圾收集器。它是以最短的停顿时间进行垃圾回收。响应快,体验好,适合B/S架构
模型
回收步骤
- 初始标记
需要停顿
,仅标记一下GC Roots 能直接关联的对象,速度快 - 并发标记
对初始标记GC Roots 进行追踪过程
- 重新标记
需要停顿
,修正并发标记期间因为程序运行而导致标记发生变化的那一部分对象的标记记录,比如:浮动垃圾。停顿时间比初始标记长,远比并发时间短 - 并发清除
清除被标记的垃圾
特点
并发处理、停顿短
缺点
- 与应用程序并发执行,会占用一部分CPU资源,程序变慢,吞吐量降低
- 浮动垃圾产生。并发清除时程序还在运行,程序运行会产生新的垃圾,这些垃圾产生在标记之后,本次无法被清理,下次才会被清理,这部分垃圾
浮动垃圾
- 使用
标记-清除
算法,会产生大量碎片空间。大对象空间不足时,会提前发生FullGC