JVM 垃圾回收器详解
JVM 垃圾收集器发展史就是一部低延迟优化史。从单线程到并发,从分代到分区,每一代 GC 都在解决什么问题?
一、垃圾回收理论基础
- 1.1 标记阶段——可达性分析
- 1.2 清除阶段——标记-清除、标记-整理、标记-复制
- 1.3 分代收集理论——弱分代假说与跨代引用假说
- 1.4 记忆集(Remembered Set)与卡表(Card Table)
二、Serial / Serial Old——最早的收集器
- 2.1 单线程工作的原理
- 2.2 Stop The World(STW)的全过程
- 2.3 适用场景——桌面应用、单核服务器
三、ParNew——Serial 的多线程版本
- 3.1 新生代并行收集
- 3.2 与 CMS 的”黄金搭档”关系
四、Parallel Scavenge / Parallel Old——吞吐量优先
- 4.1 关注点:CPU 利用率 vs 用户停顿时间
- 4.2
-XX:MaxGCPauseMillis与-XX:GCTimeRatio的博弈 - 4.3 自适应调节策略
UseAdaptiveSizePolicy
五、CMS——低延迟的先行者
- 5.1 并发标记-清除的四个阶段
- 5.2 初始标记 → 并发标记 → 重新标记 → 并发清除
- 5.3 三色标记法与增量更新
- 5.4 浮动垃圾与 Concurrent Mode Failure
- 5.5 内存碎片问题与 Full GC 降级
六、G1——平衡吞吐量与延迟
- 6.1 Region 分区设计——打破固定分代
- 6.2 Humongous Object 大对象区
- 6.3 混合回收(Mixed GC)
- 6.4 SATB(Snapshot-At-The-Beginning)并发标记
- 6.5 停顿预测模型——
-XX:MaxGCPauseMillis到底怎么起作用 - 6.6 G1 调优参数实战
七、ZGC——亚毫秒级延迟
- 7.1 染色指针(Colored Pointers)技术
- 7.2 读屏障与并发整理
- 7.3 动态 Region 大小
- 7.4 NUMA 感知
- 7.5 ZGC 在 JDK 各版本的演进(JDK11 → JDK21 分代 ZGC)
八、Shenandoah——另一个低延迟选择
- 8.1 Brooks Pointer 转发指针
- 8.2 与 ZGC 的核心差异
九、垃圾收集器选型指南
- 9.1 场景匹配:批处理 / Web 服务 / 低延迟交易
- 9.2 JDK 版本的默认 GC 变化
- 9.3 一个选型决策树
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 谜思录!