67. G1垃圾收集器中的region、G1垃圾收集器的主要回收环节概述

 

1. Region的介绍

  1. G1收集器,默认将Java堆划分成约2048个大小相同的独立的Region块,每一个Region块大小根据堆空间的时间大小来决定,范围控制在1MB32MB之内。所有的Region大小相同,且在JVM生命周期内不会改变(除非JVM停止之后,重新设置Region的大小,否则region的大小不会改变)。
  2. Region使新生代和老年代的物理空间可以是不连续的。
    在这里插入图片描述
  3. 如下图,堆区被划分成了各个Region,各个Region分别表示Eden区,Survivor区,Old区。一个Region只能属于一个角色,也就是说一个Region不能一部分是Eden区,一部分是Old区或Survivor区。
    在这里插入图片描述
  4. G1垃圾收集器还新增加了一种内存区域Humongous区。主要用于存储大对象,如果对象大小超过1.5Region,就放到H
  5. 设置H区的原因:对于堆中的大对象,默认会被分配到老年代,但是如果它是一个短期存在的对象,由于老年代垃圾收集的频率较低,这个对象是不能及时被回收掉的,会对垃圾收集造成负面的影响。
    设置H区,就能够及时回收。如果一个H区装不下一个大对象,则寻找连续的H区来存储,如果找不到连续的H区,就会启动Full GC
    在这里插入图片描述

2.G1垃圾收集器的主要回收环节

    1. G1垃圾收集器收集垃圾的主要环节可以分为3个阶段(也有可能出现第4个阶段Full GC):
      a) 年轻代GC (Young GC)
      b) 老年代并发标记 (Concurrent Markong)
      c) 混合回收(Mixed GC)
      d) 如果Mixed GC失败,就会触发Full GC
      在这里插入图片描述
      G1回收垃圾的步骤如下图所示,首先是年轻代GC,然后是并发标记过程(并发标记过程可能和年轻代GC一起发生),最后是混合回收。混合回收失败会触发Full GC
      在这里插入图片描述
      3个阶段的简单描述如下:
      在这里插入图片描述
posted @ 2020-11-19 00:05  跃小云  阅读(409)  评论(0编辑  收藏  举报