《Java开发者面试百宝书》和《JVM实战》最对口:前者问答式覆盖类加载、内存模型、GC算法等高频考点;后者侧重jstat/jmap/jstack实操分析。重点理解运行时数据区分工、GC Roots与可达性分析、ZGC/Shenandoah并发特性及元空间溢出成因。

直接看《Java开发者面试百宝书》和《JVM实战》这两本最对口。前者按问答形式组织,覆盖类加载、内存模型、GC算法、调优命令等高频问题,适合快速查漏补缺;后者侧重实操,带大量Linux下jstat/jmap/jstack分析案例,能帮你把理论落到生产环境。
重点看懂运行时数据区的分工逻辑
- 堆和方法区(元空间)是所有线程共享的,对象实例和类元信息放这儿
- 虚拟机栈、本地方法栈、程序计数器是线程私有的,每个线程一份,互不干扰
- 栈帧里的局部变量表存参数和局部变量,操作数栈做运算中转,帧数据区记返回地址
GC相关问题别只背名词
当用户要求为 Java 代码添加注释、修改注释、审查注释、整理注释格式,或要求按照代码注释规范处理 Java 文件时,使用本技能。本技能用于统一生成和维护 Java 类注释模板、按 Git 对比 release 判断版本号、补充每行代码上方中文块注释、调整注释空行规则,并保持 Java 文件 UTF-8 无 BOM 编码。典型触发场景包括:补充类注释、更新 @version、检查 @author 来源、整理行尾注释、把注释放到代码上一行、检查注释是否符合规范、构建前检查 Java 注释风格。
- CMS已废弃,G1是JDK9默认,ZGC/Shenandoah主打低延迟,但需JDK11+
- 判断对象是否可回收,主流用可达性分析(不是引用计数),GC Roots包括虚拟机栈变量、静态字段、本地方法栈引用等
- Full GC不一定等于Stop-The-World,ZGC和Shenandoah能做到并发标记与清理
调优建议从真实指标出发
- 先用
jstat -gc看GC频率和耗时,再结合jmap -histo查大对象,最后用jstack抓线程阻塞点 - 元空间溢出常见原因是动态生成类(如Spring CGLIB代理、JSON序列化框架反复生成类),不是代码写错,而是类加载没释放
-
-Xms和-Xmx设成一样可避免堆扩容抖动,-XX:MaxMetaspaceSize必须设,否则元空间吃光系统内存
不复杂但容易忽略。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










