JVM垃圾回收器之G1(Garbage First)(一)

tech2024-09-28  20

前面介绍了Serial GC、CMS、Parallel GC。这些垃圾回收器相较于G1,还是稍显逊色。G1在大内存的情况下优势十分明显。

G1设定的目标:延迟可控的情况下获得尽可能高的吞吐量。

强大的G1垃圾回收器

我们知道,在G1垃圾回收器之前,前面的垃圾回收器都是将内存划分为新生代与老年代,并且它们的内存区域是连续的。 而G1则不同,虽然它依旧有新生代、老年代,但是它用一个一个的region来表示。

原来的内存结构 G1使用的内存结构

G1将内存划分为一个一个的region,内存回收就是以region作为其基本内。region之间使用复制算法,但整体上面来看是使用标记-整理算法由于这两个回收算法的特点,可以避免内存碎片化问题。触发GC的几率大大减少。

可预测的停顿时间

G1除了追求低延迟,还建立了可预测的停顿时间模型。能够让使用者明确指定一个长度为M毫秒的时间片段上,消耗在垃圾收集的时间不得超过N毫秒。由于G1使用分区,它可以只选取部分区域进行垃圾回收,这样缩小了回收的范围。G1会追踪每个Region里面的垃圾堆积的价值大小(也就是说能回收多少垃圾与回收时间的权衡)。维护一个优先列表,回收时就会回收价值最大的region,这样能够保证尽可能高的提高收集效率。

G1的缺点

G1在垃圾收集产生的内存占用还是在程序运行时的额外执行负载,都要比CMS高。

经验选择:在小内存的应用选择CMS。大内存运用选择G1。两者平衡点在6~8GB之间。

G1垃圾回收过程

年轻代GC(Young GC)老年代并发标记过程 (Concurrent Marking)混合回收(Mixed GC)Full GC还存在,只不过作为一种保底机制。

G1垃圾回收过程,详细介绍请参照 JVM垃圾回收器之G1(Garbage First)(二)

最新回复(0)