简介
G1 收集器是一款主要面向服务端应用的垃圾收集器,特点是以极高概率满足GC停顿时间的要求(可预测的停顿),同时具备高吞吐性能。
堆内存划分
虽然 G1 收集器也遵循分代收集理论,但其堆内存的布局与其他收集器有非常明显的差异:
- G1 不再坚持固定大小和固定数量的分代区域划分,而是把连续的 Java 堆划分为约2048个个大小相等的分区(Region),每个 Region 都可以根据需要,扮演新生代的 Eden 空间、Survivor 空间,或者老年代空间。
- Region 中还有一类特殊的 Humongous 区域,专门来存储大对象(大小超过一个 Region 容量的一半);而对于超过整个 Region 的超大对象,将会被存在 N 个连续的 Humongous Region 中(G1 的大多数行为都把 Humongous Region 作为老年代的一部分看待)。
- 从分代上看,G1依然属于分代型垃圾回收器,它会区分年轻代和老年代,年轻代依然有Eden区和Survivor区。但从堆的结构上看,它不要求整个Eden区、年轻代或者老年代都是连续的,也不再坚持固定大小和固定数量。(一个region有可能属于Eden、Survivor、Old或者Humongous区域,但是一个region只可能属于一个角色)
G1 收集器的堆内存划分如图所示: