基础算法(理论层面)

算法 原理 优点 缺点
标记-清除(Mark-Sweep) 标记存活对象,清除未标记 简单、不移动对象 内存碎片、效率低
标记-复制(Mark-Copy) 存活对象复制到另一块内存 无碎片、高效 内存利用率仅 50%
标记-整理(Mark-Compact) 存活对象向一端移动,清理边界外 无碎片、内存利用率高 移动对象开销大、STW 长

垃圾回收器分类

1. 分代收集器

回收器 新生代算法 老年代算法 特点 适用场景
Serial 复制 整理 单线程、STW 客户端/嵌入式
ParNew 复制(并行) Serial 的多线程版 配合 CMS 使用
Parallel Scavenge 复制(并行) 整理 吞吐量优先 后台计算/批处理
Parallel Old 整理(并行) Parallel 的老年代版 同上

2.低延迟收集器(并发标记)

回收器 算法 核心设计 优点 缺点
CMS(Concurrent Mark Sweep) 标记-清除 并发标记、并发清除 低延迟 内存碎片、浮动垃圾、并发失败退化为 Serial Old
G1(Garbage First) 标记-整理 + 复制 Region 分区、优先回收垃圾最多区 可预测停顿、平衡吞吐与延迟 内存开销略大

G1 关键参数:-XX:MaxGCPauseMillis=200(目标最大停顿 200ms)

3.新一代低延迟收集器(ZGC / Shenandoah)

回收器 算法 核心设计 目标停顿 JDK 版本
ZGC 标记-复制 + 染色指针 并发整理、读屏障、染色指针 < 10ms JDK 11+(生产可用),JDK 15+ 稳定
Shenandoah 标记-复制 + Brooks 指针 并发标记、并发整理、读屏障 < 10ms JDK 12+(Red Hat 主导)
Epsilon 不回收 仅分配不回收,用于性能测试 JDK 11+

核心对比

维度 Parallel CMS G1 ZGC / Shenandoah
设计目标 吞吐量 低延迟 平衡 超低延迟
最大堆 无限制 较小 数十 GB TB 级
典型停顿 数百 ms~数 s 几十~几百 ms 几十~几百 ms < 10ms
内存碎片 严重 可控
并发能力 部分 部分 全并发
JDK 推荐 JDK 8 默认 已废弃(JDK 14) JDK 9+ 默认 JDK 17+ 推荐

更多推荐