全景地图
| 模块 | 核心内容 | 篇目 |
|---|---|---|
| 内存与对象 | 五块数据区、对象五道工序、三段身体 | 2-3 |
| 类加载 | 五步流水线、双亲委派与打破 | 4-5 |
| 垃圾回收 | 可达性分析、三算法、Serial 到 ZGC | 6-10 |
| 实战排查 | GC 日志、四件套、MAT、OOM/CPU/泄漏 | 11-16 |
| 调优进阶 | 参数思路、JIT 手术、堆外内存 | 17-19 |
知识的环
这四层不是并列关系,是依赖关系:不懂内存结构,就看不懂 GC 在收什么;不懂 GC,就看不懂泄漏曲线和调优参数;不懂排查工具,前面学的全都落不了地。反过来,排查能力又加深对机制的理解——用 MAT 摸过一次引用链,可达性分析就再也不用背了。这也是这个系列把"实战排查"排在中间而不是末尾的原因:它是理解机制的最好练习场。
高频问题清单
面试常问的十问,每问配一句答法提示:①运行时数据区——五块+谁私有谁共享;②对象创建过程——五道工序+TLAB;③双亲委派——模型+为什么+怎么打破;④四种引用——各举一个应用;⑤CMS 与 G1——算法差异+停顿模型;⑥ZGC 为什么快——着色指针+读屏障;⑦CPU 飙高怎么排查——top -Hp→jstack 三步;⑧排查过什么内存问题——准备一个自己的案例(泄漏/OOM 各一);⑨调优思路——漏斗+目标先行+单变量;⑩StackOverflow 与 unable to create thread 区别——单栈深 vs 线程数。⑧是分水岭:答得出案例的是排查过,答不出的是背过。
五个动手实验
1. 造一次 OOM:List 撑爆堆,观察 HeapDumpOnOutOfMemoryError 的 dump
用 MAT 打开,找到那条 List——全程十分钟,收益一学期
2. 造一次 StackOverflowError:无限递归,调 -Xss 看栈深变化
3. 观察 GC:写个不停分配的程序,-Xlog:gc* 对照本系列第 11 篇读日志
4. 制造一次慢泄漏:ThreadLocal 不 remove + 线程池,看老年代基线抬升
5. 自定义类加载器:加载同一个类两次,验证 instanceof 为 false五个实验对应五个知识块,每个不超过半小时。JVM 的知识,做过一遍和看过一遍,是两种东西。
收官:JVM 在整个体系里的位置
把视角拉远:限流熔断守护的是流量,缓存守护的是数据库,分库分表守护的是存储,而 JVM 守护的是进程本身——前面所有高并发手段,最终都要在 JVM 这个地盘上跑。流量洪水穿过限流的大门,挤进的是堆和 GC 的世界;缓存命中率的背后,是元空间里那串类在支撑。二十篇收官,愿下次告警响起时,你不再只有重启大法。
评论 (0)