知识体系大纲
本章节涵盖 Java 虚拟机的核心知识体系,从内存模型到垃圾回收、类加载机制、字节码执行引擎到生产调优实战。
📚 学习路线
内存模型 → 垃圾回收 → 类加载机制 → 字节码与执行引擎 → 调优实战🎯 核心内容
第一部分:内存模型与内存区域
理解 JVM 运行时数据区的划分与各区域的作用。
运行时数据区:堆、方法区、虚拟机栈、本地方法栈、程序计数器
堆内存结构:新生代、老年代、永久代/元空间
对象的创建与内存布局:对象头、实例数据、对齐填充
内存溢出与泄漏:OOM 场景分析与排查
学习时长:2-3 周 难度:⭐⭐⭐
第二部分:垃圾回收 ⭐ 重点
深入理解 GC 原理与各代垃圾收集器的设计思想。
垃圾判定算法:引用计数法、可达性分析、GC Roots
垃圾回收算法:标记-清除、标记-复制、标记-整理、分代收集
经典垃圾收集器:Serial、ParNew、Parallel Scavenge、CMS
新一代垃圾收集器:G1、ZGC、Shenandoah
GC 调优:GC 日志分析、停顿时间优化、吞吐量调优
学习时长:3-4 周 难度:⭐⭐⭐⭐⭐
第三部分:类加载机制
掌握类的生命周期与类加载器体系。
类的生命周期:加载、验证、准备、解析、初始化、使用、卸载
类加载器:Bootstrap、Extension、Application、自定义类加载器
双亲委派模型:工作原理、打破双亲委派(SPI、OSGi、热部署)
类加载实战:热部署、模块化、类隔离
学习时长:1-2 周 难度:⭐⭐⭐
第四部分:字节码与执行引擎
理解 Java 代码从编译到执行的完整过程。
Class 文件结构:魔数、常量池、访问标志、字段表、方法表、属性表
字节码指令:操作数栈、局部变量表、常用指令集
执行引擎:解释执行、JIT 编译、混合模式
方法调用:静态分派、动态分派、方法表、内联缓存
学习时长:2-3 周 难度:⭐⭐⭐⭐
第五部分:JVM 调优实战
掌握生产环境 JVM 调优的方法论与工具。
JVM 参数配置:堆大小、GC 选择、JIT 编译参数
监控与诊断工具:jps、jstat、jmap、jstack、jcmd、JVisualVM、Arthas
性能调优方法论:GC 调优、内存调优、线程调优
故障排查:CPU 飙高、内存泄漏、死锁、频繁 Full GC
学习时长:持续实践 难度:⭐⭐⭐⭐
🔥 面试高频考点
必须掌握(⭐⭐⭐⭐⭐)
JVM 内存区域
运行时数据区的划分
堆和栈的区别
方法区与元空间的关系
各区域可能的 OOM 异常
垃圾回收机制
GC Roots 有哪些
四种引用类型(强、软、弱、虚)
常见垃圾回收算法
CMS 和 G1 的区别
类加载机制
类加载的过程
双亲委派模型
如何打破双亲委派
类的初始化时机
JVM 调优
常用 JVM 参数
GC 日志分析
内存泄漏排查思路
Full GC 频繁的原因
深入理解(⭐⭐⭐⭐)
对象创建过程
类加载检查 → 内存分配 → 初始化零值 → 设置对象头 → 执行 init
内存分配方式:指针碰撞 vs 空闲列表
线程安全:TLAB
JIT 编译优化
热点代码检测
方法内联
逃逸分析
栈上分配、标量替换
G1 收集器详解
Region 划分
Remembered Set
混合回收过程
停顿预测模型
ZGC 与低延迟 GC
着色指针
读屏障
并发处理
停顿时间目标
实战能力(⭐⭐⭐⭐⭐)
线上服务 CPU 100% 如何排查
线上服务频繁 Full GC 如何处理
内存泄漏如何定位
如何选择合适的垃圾收集器
生产环境 JVM 参数如何配置
📖 推荐学习资源
书籍
《深入理解 Java 虚拟机》 - 周志明(必读)
《Java 虚拟机规范》 - Oracle
《Java Performance: The Definitive Guide》 - Scott Oaks
《垃圾回收的算法与实现》 - 中村成洋
博客与文章
R 大的 JVM 知乎回答 - JVM 深度解析
美团技术团队 JVM 系列 - 生产调优实践
OpenJDK 源码与文档
开源项目
🎓 学习建议
1. 理论与实践结合
每学一个知识点,用工具验证:
2. 画图理解
画出 JVM 内存区域图
画出 GC 过程示意图
画出类加载器层次结构
3. 阅读源码
按优先级阅读:
HotSpot 内存管理模块
G1 收集器实现
类加载器实现
解释器与 JIT 编译器
4. 动手实验
使用 JVM 参数和工具实际操作:
5. 故障模拟
主动制造问题,练习排查能力:
模拟 OOM 场景
模拟 CPU 飙高
模拟内存泄漏
模拟死锁
💡 学习检查清单
完成每个阶段后,检查是否达到以下标准:
内存模型
垃圾回收
类加载
字节码
调优实战
🚀 开始学习
选择适合你的起点:
完全新手:从「内存模型与内存区域」开始,打好基础
有一定基础:直接进入「垃圾回收」,这是重点
准备面试:重点看「面试高频考点」,结合调优实战
深度学习:研读 HotSpot 源码,理解实现细节
预计总学习时间:10-14 周
建议学习节奏:
工作日:每天 1-2 小时理论学习
周末:3-4 小时深度学习 + 工具实操
记住:JVM 知识需要大量实验验证,光看理论远远不够,一定要动手用工具观察实际行为!
开始你的 JVM 深度学习之旅吧!💪
Last updated