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 2022-03-02 14:43  云中哥  阅读(66)  评论(0编辑  收藏  举报

导航