G1(Garbage-First)垃圾收集器是 Java 虚拟机(JVM)中一款非常重要的垃圾收集器,从 JDK 9 开始成为默认的垃圾收集器。它主要面向大内存、多处理器的服务器环境,其核心设计目标是在保证高吞吐量的同时,实现可预测的垃圾回收停顿时间(Pause Time)。 为了理解 G1 的工作原理,我们需要从它的内存布局、核心数据结构以及垃圾回收的过程三个方面来剖析。 --- 一、 颠覆性的内存布局:Region (区域) 在 G1 之前的收集器(如 CMS、Parallel),堆内存被物理划分为连续的年轻代(Young Gen)和老年代(Old Gen)。 G1 打破了这种物理边界,它将整个 Java 堆划分为多个大小相等的独立区域(Region)(通常大小为 1MB - 32MB,最多约 2048 个)。 虽然物理上不连续,但 G1 仍然保留了逻辑上的分代概念。每个 Region 都可以动态地扮演以下角色之一: 1. Eden 空间 (E):存放新创建的对象。 2. Survivor 空间 (S):存放经过一次或多次 Young GC 后仍然存活的对象。 3. Old ...