Java之垃圾收集器比较

2018-11-26  本文已影响0人  小玲子之凌空蹈虚

Serial收集器

ParNew收集器

parallel Scavenge收集器

Serial Old收集器

Parallel Old收集器

CMS收集器(Concurrent Market Sweep)

1:初始化标记(CMS initial mark)
2:并发标记(CMS concurrent mark)
3:重新标记(CMS remark )
4:并发清除(CMS concurrent Sweep)
其中,初始标记、清除标记仍然需要STW,初始标记仅仅只是标记一下GC Roots能直接关联到的对象,速度很快。
特点:并发收集、低停顿。
缺点:
1:CMS收集器无法处理浮动垃圾,可能出现Concurrent Mode Failure 失败导致另一次Full GC的发生。
2:会产生大量的空间碎片,空间碎片过多时,将会给大对象分配带来很大麻烦。

并发标记阶段是进行GC Roots Tracing的过程。
重新标记阶段则是为了修正并发标记期间用户程序继续运作而导致标记产生变动的那一部分对象的标记记录,这个阶段的停顿时间一般会比初始化标记阶段稍长一些,但远比并发标记的时间短。
由于整个过程中耗时最长的并发标记和并发清除过程收集器都可以与用户线程一起工作,所以,从总体上来说,CMS收集器的内存回收过程是用户线程一起并发执行的。

G1收集器

G1是一款面向服务端应用的垃圾收集器,与CMS相比,G1具备如下特点:

1:并行与并发
2:分代收集
3:空间整合,与CMS的“标记-清理”算法不同,G1从整体来看是基于“标记-整理”算法实现的收集器
4:可预测的停顿

G1收集器的运作大致可划分为几个步骤

1:初始化标记(initial marking)
2:并发标记(concurrent marking)
3:最终标记(Final Marking)
4:筛选回收(Live Data Counting Evacuation)

上一篇 下一篇

猜你喜欢

热点阅读