G1垃圾回收器

适用场景:

  • 同时注意吞吐量和低延迟  默认的暂停目标是200ms                 ,
  • 适合超大堆内存,会将堆划分为多个大小相等的区域

特点:

  • 整体上是标记+整理算法,两个区域之间是复制算法

垃圾回收阶段:

  1. Young Collection新生代的垃圾收集
  2. Young Collection + Concurrent Mark(新生代垃圾回收+并发标记)
  3. Mixed Collection 混合收集

  • Young Collection新生代的垃圾收集:

① 如下图1-1,G1垃圾回收器把堆内存划分为一个个大小相等的区域,每个单独的区域都可以作为伊甸园、幸存者区域或老年代,并会设置伊甸园区域的大小。   

          ②当伊甸园区域逐渐被占满(白色区域代表空白,绿色代表对象存入伊甸园区),则进行Young Collection(新生代垃圾收集),并会触发时间较短的stop the world。 经过Young Collection,把伊甸园没有被回收掉的对象以拷贝的方式放入幸存区S。

           ③再经过一段时间,当幸存区对象比较多了,幸存区会再触发垃圾回收。幸存区有一部分对象,年龄达到阈值会晋升到老年代O,而对于年龄达不到阈值的幸存对象,继续拷贝到新的幸存者区域。


 

  •  Young Collection + Concurrent Mark(新生代垃圾回收+并发标记)

        ①在Young GC时会进行GC Root的初始标记(对根对象进行标记,在新生代GC时发生)

        ②在老年代占用堆空间比例达到阈值(默认45%)时,进行并发标记(不会stop the world)

        注:阈值可以用JVM参数来设定:-XX:InitiatingHeapOccupancyPercent=percent


  •  Mixed Collcetion混合收集

       这个阶段会对伊甸园、幸存者区域和老年代进行全面回收。

  • 伊甸园的幸存对象,被复制到幸存者区;
  • 幸存者区域存活且年龄不到的对象被复制到新的幸存者区域,年龄到达阈值的晋升到老年代;
  • 老年代的对象,也采用了复制算法,把老年代存活的对象,复制到新的老年代区域。但不是所有的老年代幸存对象都直接复制到新的老年代区域。因为堆空间可能太大,老年代的对象回收会经过大量时间,所以G1回收器根据最大回收时间,挑选回收价值最大的老年代区域进行复制和垃圾回收。复制的时间少了,就达到了暂停时间短的目标。

注:

  • 混合收集在最终标记和拷贝存活两个阶段都会触发stop the world
  • 最终标记是为了,标记并发标记可能漏掉的对象(并发标记的同时,其他线程也在工作,可能会产生一些新的垃圾,改变一些对象的引用)。
  • 拷贝存活是在最终标记之后,进行复制转移。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值