本文系统讲解 JVM 垃圾回收与线上调优:从引用计数的缺陷出发,梳理可达性分析与六类 GC Roots、对象 finalize 的"死缓"与废弃类判定;对比标记清除、标记复制、标记整理三类算法与分代收集假说;深入三色标记的漏标问题与增量更新、SATB 两种解法,讲透卡表、记忆集与写屏障;横向对比 Serial 到 ZGC 的全家族收集器与 JDK 默认演进;最后给出 GC 日志解读、调优方法论与 jstat/jmap/jstack/arthas/MAT 排查工具箱及高频面试题。
本文从 JVM 规范出发,系统拆解运行时数据区(程序计数器、虚拟机栈、本地方法栈、堆、方法区/元空间、直接内存)的职责边界与 OOM 表现,并给出容器化场景下的参数模板。随后沿着 new 指令追踪对象从字节码、TLAB 分配、对象头 Mark Word 到对齐填充的完整内存布局,讲清指针压缩的 32G 分界线与逃逸分析、标量替换、栈上分配的判定链。最后深入类加载五阶段、被动引用经典案例、三层类加载器与双亲委派的源码逻辑及其被打破的三种场景,配合自定义类加载器实现热加载与类隔离,并总结六类 OutOfMemoryError 的排查套路。
从"一个 .class 文件是如何变成内存中可用的 Class 对象"讲起,系统拆解 JVM 类加载机制:类的生命周期五阶段与主动/被动引用的初始化时机、四层类加载器与双亲委派模型的设计动机、SPI/JDBC 与 Tomcat 破坏双亲委派的经典案例、自定义类加载器与热部署实战,最后总结 ClassNotFoundException 与 NoClassDefFoundError 的区别等生产避坑清单,与 JVM GC 篇共同拼出完整的 JVM 运行时图景。
本文系统讲解JVM垃圾回收机制,包括内存区域划分、垃圾判定算法、经典垃圾回收算法、七大垃圾收集器特点对比,以及生产环境常用的JVM调优参数配置,帮助开发者理解GC原理并进行性能优化。