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

浙公网安备 33010602011771号