JDK9的默认垃圾回收器,取代了之前的CMS垃圾回收器。

图片说明
(1)垃圾回收阶段

首先是进行Young Collection,当老年代到达阈值时,进行Young Collection+ConcurrentMark,最后进行Mixed Colletion。

图片说明

(2)Young Collection

新创建的对象会被放入伊甸园。

图片说明
当伊甸园满后(会分配总的大小)会进行Young Collection。通过复制算法将未被回收的对象移至幸存区。

图片说明
当再次触发垃圾回收时,会将一部分没有被回收的幸存区对象移到老年代(达到年龄阈值),另一部分没有被回收的幸存区对象移到其他幸存区(未达到年龄阈值)。

图片说明
(2)Young GC+CM(Concurrent marking)

  • 在Young GC(阶段1)的同时进行GC Root初始标记
  • 在老年代内存占用达到阈值时,会触发并发标记(无SWT)

图片说明
(3)混合收集

混合收集阶段会全面收集垃圾,但是值得注意的是可以通过参数设置最大暂停时间,为了达到最大暂停时间的设置目标,老年代的内存可能不会全部进行拷贝整理,而是优先整理垃圾最多的内存。这也称其为G1的原因(Garbage First).

图片说明