常见垃圾回收器
2021-04-14 14:32:11 0 举报
JVM常见垃圾回收器
作者其他创作
大纲/内容
O
Parallel Old
1. 算法:ColoredPointers + WriteBarrier
SerialOld
ParNew
a stop-the-world,mark-sweep-compact collector that uses a single GC thread
ParallelOld
ConCurrent Mark Swap
E
a stop-the-world,copying collector which uses a mulitiple GC thread
并发标记
G1
1. 10ms - 1ms2. 算法:ColoredPointers + LoadBarrier3. JDK11 引入,支持2^42 4TB JDK13 支持2^44 16TB
并发清理
1. 空间整合:与CMS的“标记–清理”算法不同,G1从整体来看是基于“标记-整理”算法实现的收集器;从局部上来看是基于“复制”算法实现的。2. 可以设置一个垃圾回收的预期停顿时间。简而言之,G1会根据开发设定的预期系统停顿时间,来选择最少回收时间和最多垃圾对象的Region进行回收,效率和成果最大化,保证GC时的停顿时间在可控范围内。
Serial
Serial Old
1. 年轻代2. 单线程串行回收3. 最大支持几十M内存
S
Shenandoah
Humongous
垃圾回收器的发展路线,是随着内存越来越大的过程而演进 从分代算法演化到不分代算法 Serial算法 几十兆 Parallel算法 几个G CMS 几十个G承上启下 开始并发回收 三色标记
CMS存在一定的问题:1. 由于CMS老年代使用标记-清除回收策略,因此会有内存碎片问题。当碎片过多时,将会给大对象分配带来麻烦,往往会出现老年代还有很多空间但就已经不能保存对象了。不得不提前触发一次Full GC。为了解决这个问题,CMS收集器提供了-XX:UseCMSCompactAtFullCollection开关参数,用于在CMS收集器不得不进行Full GC时开启内存碎片的合并整理过程。 有参数可以配置有多少次Full GC会堆内存碎片进行整理(-XX:CMSFullGCsBeforeCompaction)
CMS
H
初始标记
Parallel Scanvenge/ParNew
Region
a stop-the-world,copying collector which uses a single GC thread
Old
Survivor
1. 200ms - 10ms2.算法:三色标记 + SATB
Eden
Epsilon:只负责分配内存,不做任何垃圾回收操作
1. 老年代2. 串行回收
1. 年轻代2. 并行回收
1. 老年代
标记错误的毕竟少出,所以STW时间较短
a stop-the-world,mark-sweep-compact collector that uses a mulitiple GC thread
ParallelScavenge
只标记根对象,STW停顿时间较短
重新标记
Epsilon
1. 年轻代2. 配合CMS并行回收
单CPU效率最高虚拟机是client模式的默认垃圾回收器
1. 老年代代2. 并行回收
跟踪根对象 进一步跟踪标记
ZGC
0 条评论
下一页