本文从 JVM 规范出发,系统拆解运行时数据区(程序计数器、虚拟机栈、本地方法栈、堆、方法区/元空间、直接内存)的职责边界与 OOM 表现,并给出容器化场景下的参数模板。随后沿着 new 指令追踪对象从字节码、TLAB 分配、对象头 Mark Word 到对齐填充的完整内存布局,讲清指针压缩的 32G 分界线与逃逸分析、标量替换、栈上分配的判定链。最后深入类加载五阶段、被动引用经典案例、三层类加载器与双亲委派的源码逻辑及其被打破的三种场景,配合自定义类加载器实现热加载与类隔离,并总结六类 OutOfMemoryError 的排查套路。
从"一个 .class 文件是如何变成内存中可用的 Class 对象"讲起,系统拆解 JVM 类加载机制:类的生命周期五阶段与主动/被动引用的初始化时机、四层类加载器与双亲委派模型的设计动机、SPI/JDBC 与 Tomcat 破坏双亲委派的经典案例、自定义类加载器与热部署实战,最后总结 ClassNotFoundException 与 NoClassDefFoundError 的区别等生产避坑清单,与 JVM GC 篇共同拼出完整的 JVM 运行时图景。