CMS垃圾回收器
收集过程:
1.初始标记阶段:所用的用户线程都会短暂停顿,主要任务是标记GC ROOT能够直接关联到对象,一旦标记完成后就会恢复之前的用户线程,由于直接关联的对象比较少,恢复比较快。
2.并发标记阶段:从GC ROOTS直接关联的对象开始遍历整个对象图,标记处全部的垃圾对象,耗时比较长,但是这个过程不需要暂停用户线程。
3.重新标记阶段:由于在并发标记阶段用户线程和垃圾收集线程运行或者交叉运行,因此为了修正并发标记期间,用户线程运作而导致标记产生变化的那一部分。
4.清楚阶段:清楚标记阶段判断已经死亡的对象
优点:
并发收集,低停顿
缺点:
1.CMS收集器对CPU资源非常敏感,他虽然不会导致用户线程停顿,但会占用一部分线程而导致应用程序变慢,总吞吐量降低。
2.CMS收集器无法处理浮动垃圾,可能出现Concurrent Mode Failure 失败导致另一次FUll GC的产生。由于CMS并发清理阶段用户线程还在运行,会产生新的垃圾,由于这些是出现标记阶段后,所以无法处理。
3.CMS使用的是标记清除算法,收集结束shi会有大量空间碎片产生,可能会产生老年代剩余空间很多,但无分配足够连续的大空间,提前触发FULL gc
XX:CMSInitiatingOccupancyFraction 设置堆内存使用率的阀值,一旦达到该阀值,便开始进行回收。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· .NET10 - 预览版1新功能体验(一)