
今日主题Java 垃圾回收机制与主流回收器实战分代收集理论JVM 基于“弱分代假说”绝大多数对象朝生夕死将堆划分为新生代Eden、Survivor0/1和老年代。新对象诞生于 Eden熬过 Minor GC 则移入 Survivor 区并增加年龄默认 15 岁后晋升老年代。老年代满则触发 Full GC成本高昂。主流垃圾回收器Serial / Parallel GCSerial 是单线程版适用于客户端Parallel 是多线程吞吐量优先收集器适合后台运算。CMS (Concurrent Mark-Sweep)以低停顿为目标大部分工作与用户线程并发。但采用标记-清除算法易产生内存碎片且 CPU 并发开销大在 JDK 14 后被标记为废弃。G1 (Garbage-First)JDK 9 后默认回收器。将堆划分为多个 Region兼顾吞吐量与低延迟支持可预测停顿-XX:MaxGCPauseMillis。适合大内存、对延迟敏感的服务端应用。ZGCJDK 15 正式转正通过染色指针和读屏障技术实现亚毫秒级停顿且停顿时间不随堆大小增长。JDK 21 推出的分代 ZGC-XX:ZGenerational进一步提升了小对象回收效率。GC 调优策略堆大小建议将-Xms和-Xmx设为相同值避免动态扩容带来的开销。回收器选择追求吞吐量选 Parallel追求低延迟选 G1 或 ZGC超大堆TB 级且要求极致低延迟首选 ZGC。监控分析务必开启 GC 日志如-Xlog:gc进行监控避免出现内存泄漏或频繁 Full GC。