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 设置堆内存使用率的阀值,一旦达到该阀值,便开始进行回收。

posted on   云中哥  阅读(74)  评论(0编辑  收藏  举报

相关博文:
阅读排行:
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· .NET10 - 预览版1新功能体验(一)

导航

< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

统计

点击右上角即可分享
微信分享提示