G1(Garbage-First)是JDK 9起成为默认的服务端垃圾回收器,主打在可控停顿时间内实现高吞吐量,适配大内存场景。
一、核心内存布局
G1把整个堆内存划分为约2048个大小1~32MB的等大Region,每个Region可动态扮演Eden、Survivor或老年代角色,不再要求新生代/老年代物理连续。
二、完整回收流程
初始标记:STW,标记GC Roots直接关联的对象
并发标记:与用户线程并行,遍历标记全堆存活对象
最终标记:STW,处理并发阶段的对象引用变化
筛选回收:STW,按回收价值排序,优先回收垃圾占比最高的Region,快速释放大量空间
三、核心优缺点
优势:支持自定义最大停顿目标(-XX:MaxGCPauseMillis),用标记-整理算法避免内存碎片,适配6GB以上大内存场景
劣势:RSet记忆集占堆内存约20%,内存占用偏高,对CPU负载要求更高,吞吐量略低于Parallel GC
四、关键调优要点
停顿控制:-XX:MaxGCPauseMillis默认200ms,设置过小会导致频繁回收,反而降低吞吐量
线程配置:ParallelGCThreads取CPU核心数50%~70%适配CPU密集型业务,避免线程过多引发上下文切换
Region大小:G1HeapRegionSize推荐8~16MB,平衡小对象处理效率和元数据开销