垃圾收集算法
常见算法
引用计数 记录每个对象的引用次数,当引用次数为零时回收对象
标记-清除 根引用可达分析、扫描内存回收不可达对象
分代回收 基于观察到大多数对象生命周期较短,而少数对象生命周期较长的优化算法
空闲回收 在CPU空闲时运行垃圾回收器,以减少对程序执行的影响
增量回收 将垃圾回收任务分解为多个小步骤,逐步完成。可以避免一次性垃圾回收导致的长时间暂停,从而减少对程序性能的影响
Java最新垃圾回收算法
Java 最新垃圾回收算法(截至 2025 年)
1. 主流高效回收算法
ZGC(Z Garbage Collector)
核心特性:
支持 TB 级堆内存 的低延迟回收(停顿时间控制在 10ms 以内)。
基于 着色指针 和 读屏障 实现并发标记与整理,无需暂停应用线程。
JDK 17+ 默认支持,适用于大数据、实时交易等对延迟敏感的场景。
优化方向:
增量式压缩与分代扩展(JDK 21+ 引入 分代式 ZGC),减少年轻代回收开销。
Shenandoah
核心特性:
通过 并发整理 减少内存碎片,停顿时间与堆大小无关(通常低于 5ms)。
采用 Brooks 指针 实现对象移动与访问同步,提升并发效率。
适用场景:
云原生、微服务等需要快速响应的环境。
G1(Garbage-First)持续优化
改进点:
动态调整区域(Region)大小,提升内存利用率。
增强混合回收(Mixed GC)策略,优化老年代回收效率。
JDK 17+ 特性:
支持并行 Full GC,减少长时间停顿风险。
2. 分代模型的演进
分代式 ZGC(JDK 21+)
将堆划分为 年轻代 和 老年代,分别采用复制算法和并发标记整理算法,减少跨代引用开销。
Epsilon 无操作回收器
适用于短期任务或性能测试场景,完全禁用垃圾回收,避免 GC 开销。
3. 算法设计趋势
并发与低延迟优先:
ZGC 和 Shenandoah 通过 并发阶段占比 90%+ 实现亚毫秒级停顿。
自适应内存管理:
动态选择回收策略(如 G1 根据区域垃圾占比触发回收)。
硬件感知优化:
利用多核 CPU 并行处理,结合 NUMA 架构优化内存访问速度。
总结
Java 最新垃圾回收算法以 低延迟(ZGC/Shenandoah)和 自适应分代管理(分代式 ZGC)为核心,结合硬件特性实现 TB 级堆内存的高效回收。G1 持续优化混合回收策略,而 Epsilon 为特殊场景提供零开销方案。开发者可根据应用需求(延迟、吞吐量、堆大小)选择合适的回收器。