知识体系大纲

本章节涵盖 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

学习时长:持续实践 难度:⭐⭐⭐⭐

🔥 面试高频考点

必须掌握(⭐⭐⭐⭐⭐)

  1. JVM 内存区域

    • 运行时数据区的划分

    • 堆和栈的区别

    • 方法区与元空间的关系

    • 各区域可能的 OOM 异常

  2. 垃圾回收机制

    • GC Roots 有哪些

    • 四种引用类型(强、软、弱、虚)

    • 常见垃圾回收算法

    • CMS 和 G1 的区别

  3. 类加载机制

    • 类加载的过程

    • 双亲委派模型

    • 如何打破双亲委派

    • 类的初始化时机

  4. JVM 调优

    • 常用 JVM 参数

    • GC 日志分析

    • 内存泄漏排查思路

    • Full GC 频繁的原因

深入理解(⭐⭐⭐⭐)

  1. 对象创建过程

    • 类加载检查 → 内存分配 → 初始化零值 → 设置对象头 → 执行 init

    • 内存分配方式:指针碰撞 vs 空闲列表

    • 线程安全:TLAB

  2. JIT 编译优化

    • 热点代码检测

    • 方法内联

    • 逃逸分析

    • 栈上分配、标量替换

  3. G1 收集器详解

    • Region 划分

    • Remembered Set

    • 混合回收过程

    • 停顿预测模型

  4. ZGC 与低延迟 GC

    • 着色指针

    • 读屏障

    • 并发处理

    • 停顿时间目标

实战能力(⭐⭐⭐⭐⭐)

  • 线上服务 CPU 100% 如何排查

  • 线上服务频繁 Full GC 如何处理

  • 内存泄漏如何定位

  • 如何选择合适的垃圾收集器

  • 生产环境 JVM 参数如何配置

📖 推荐学习资源

书籍

  • 《深入理解 Java 虚拟机》 - 周志明(必读)

  • 《Java 虚拟机规范》 - Oracle

  • 《Java Performance: The Definitive Guide》 - Scott Oaks

  • 《垃圾回收的算法与实现》 - 中村成洋

博客与文章

开源项目

🎓 学习建议

1. 理论与实践结合

每学一个知识点,用工具验证:

2. 画图理解

  • 画出 JVM 内存区域图

  • 画出 GC 过程示意图

  • 画出类加载器层次结构

3. 阅读源码

按优先级阅读:

  1. HotSpot 内存管理模块

  2. G1 收集器实现

  3. 类加载器实现

  4. 解释器与 JIT 编译器

4. 动手实验

使用 JVM 参数和工具实际操作:

5. 故障模拟

主动制造问题,练习排查能力:

  • 模拟 OOM 场景

  • 模拟 CPU 飙高

  • 模拟内存泄漏

  • 模拟死锁

💡 学习检查清单

完成每个阶段后,检查是否达到以下标准:

内存模型

垃圾回收

类加载

字节码

调优实战

🚀 开始学习

选择适合你的起点:

  • 完全新手:从「内存模型与内存区域」开始,打好基础

  • 有一定基础:直接进入「垃圾回收」,这是重点

  • 准备面试:重点看「面试高频考点」,结合调优实战

  • 深度学习:研读 HotSpot 源码,理解实现细节


预计总学习时间:10-14 周

建议学习节奏

  • 工作日:每天 1-2 小时理论学习

  • 周末:3-4 小时深度学习 + 工具实操

记住:JVM 知识需要大量实验验证,光看理论远远不够,一定要动手用工具观察实际行为!

开始你的 JVM 深度学习之旅吧!💪

Last updated