vlambda博客
学习文章列表

一文带你搞明白深入解析java虚拟机垃圾回收器究竟是什么鬼

垃圾回收器

G1 GC全称是Garbage First Garbage Collector,即垃圾优先的垃圾回收器,可以使用-XX:+UseG1GC开启。G1 GC(以下简称G1)抛弃了既有堆模型,将整个堆划分为一些大小固定的内存块(Region),如图10-11所示。

图10-11 基于Region的堆划分

G1没有抛弃弱分代假说,如图10-11所示,每个Region仍然包含代纪,YGC和Mixed GC(混合回收)会选择合适的Region,然后只回收这一部分Region。G1的具体细节将在第11章详细介绍,本节只做简单讨论。

混合回收

Mixed GC是G1独有的回收策略,分为全局并发标记和对象复制两个部分:全局并发标记使用G1ConcurrentMarkThread在后台不定期运行,试图标记存活对象并找出收益较高的Region,接下来由YGC选择这些收益较高的Region并对它们使用复制算法,将其中的存活对象复制到Survivor Region,然后清空原本的Region。

复制算法可以有效地解决类似CMS GC老年代的碎片化问题,同时由于全局并发标记选择一部分Region,这使得用户可以指定一个GC最大暂停时间作为目标,由G1根据历史数据和选择的Region回收垃圾,努力达到用户设置的目标,也即让用户在一定程度上控制STW时间。完整的G1周期如图10-12所示。

图10-12 G1 GC

除了Young GC和Mixed GC,G1也有Full GC。回收速度跟不上老年代回收速度,或者无法容纳晋升对象等都可能导致Full GC。G1的FullGC与其他垃圾回收器的Full GC一样都使用标记整理算法,整个Full GC是一个完全STW的过程。

另外从图10-12中不难看出,在混合回收中,复制阶段是全局STW的,它是一个相当耗时的过程,如果G1跟不上用户设置的目标,反而容易引发Full GC。对于这些问题,新一代低停顿并发垃圾回收器Shenandoah GC和ZGC交出了新的答卷。

本文给大家讲解的内容是深入解析java虚拟机:垃圾回收,垃圾优先的垃圾回收器

  1. 下篇文章给大家讲解的是深入解析java虚拟机:垃圾回收,Shenandoah GC及并发垃圾 回收器;

  2. 觉得文章不错的朋友可以转发此文关注小编;

  3. 感谢大家的支持!