Java 内存管理、垃圾回收及优化的关键版本演变
一、垃圾回收器的默认切换
1、Parallel Scavenge/Old GC → G1
- JDK 9:首次将 G1 设为默认垃圾回收器,替代 JDK 8 的 Parallel Scavenge/Old 组合。
- JDK 10:优化 G1 的并行处理能力,降低停顿时间。
2、ZGC 与 Shenandoah 的引入
- JDK 11:引入 ZGC(低延迟回收器),支持亚毫秒级停顿和 TB 级堆内存。
- JDK 15:Shenandoah 正式发布,通过并发压缩减少停顿时间。
二、内存模型的核心变化
1、永久代(PermGen)→ 元空间(Metaspace)
- JDK 8:移除永久代,改用元空间存储类元数据,避免 OutOfMemoryError 问题。
2、堆内存分区优化
- JDK 9:G1 的分区策略支持动态调整 Region 大小,适配容器化环境。
- JDK 17:改进 ZGC 的内存分配策略,提升堆外内存管理效率。
三、性能与工具增强
1、模块化与诊断工具
- JDK 9:引入 Jigsaw 模块化系统,优化代码结构。
- JDK 11:增强 JFR(Java Flight Recorder),支持低开销 GC 事件监控。
2、参数调优简化
- JDK 11:ZGC 仅需 -XX:+UseZGC 即可启用,无需复杂配置。
- JDK 17:自适应堆大小策略(-XX:+UseAdaptiveSizePolicy)进一步优化。
四、其他重要版本特性
- JDK 10:局部变量类型推断(var 关键字)提升编码效率。
- JDK 14:引入 Records 简化数据类定义。
- JDK 16:改进 G1 的混合回收(Mixed GC)效率。
总结
- 关键转折点版本:JDK 8(元空间)、JDK 9(G1 默认化)、JDK 11(ZGC)、JDK 15(Shenandoah)。
- 优化方向:从高吞吐量(Parallel GC)向低延迟(ZGC/Shenandoah)演进,同时简化配置并增强诊断能力。