JVM面试线路
[ 2025.4.17更新 ]
JVM 面试学习线路(七大阶段)
目标:掌握 JVM 内部结构、内存模型、类加载、垃圾回收、性能调优等关键知识,助力中高级 Java 面试通关。
第一阶段:JVM 基础概览
目标:理解 JVM 的整体构成与运行机制
1. 什么是 JVM? 学习JVM
- Java 虚拟机的定义与作用
- JVM 与 JRE、JDK 的关系
- Java 的一次编写、处处运行背后的原理
2. JVM 架构总览 学习JVM架构
- 类加载子系统
- 执行引擎
- 运行时数据区(内存模型)
- 本地接口(JNI)
- 垃圾回收系统(GC)
第二阶段:运行时内存结构
目标:熟练掌握 JVM 各种内存区域的职责与特性
1. 线程私有区域 学习线程私有区域
- 程序计数器
- Java 虚拟机栈
- 本地方法栈
2. 线程共享区域 学习共享区域
- 堆(Heap)
- 新生代、老年代、元空间
- 方法区(JDK8 前) / 元空间(JDK8 后)
3. 内存溢出场景 学习OOM
- StackOverflowError
- OutOfMemoryError(堆、方法区、线程)
第三阶段:类加载机制
目标:掌握类加载流程与双亲委派机制
1. 类加载过程 学习类加载流程
- 加载 → 验证 → 准备 → 解析 → 初始化 → 使用 → 卸载
- 每一步的具体含义与执行时机
2. 类加载器体系学习类加载体系
- 启动类加载器(Bootstrap)
- 扩展类加载器(ExtClassLoader)
- 应用类加载器(AppClassLoader)
- 自定义类加载器实践
3. 双亲委派模型学习双亲委派模型
- 优点:安全性、避免重复加载
- 打破双亲委派的实际场景(如 JDBC、SPI)
第四阶段:垃圾回收机制(GC)
目标:深入理解 GC 原理与各类收集器的适用场景
1. 垃圾回收基础 学习垃圾回收
- 判定对象是否可回收
- 引用计数法(缺陷)
- 可达性分析算法
2. 引用类型 学习引用类型
- 强引用、软引用、弱引用、虚引用
3. 回收算法 学习回收算法
- 标记-清除
- 复制算法
- 标记-压缩
4. 垃圾回收器分类 学习回收器分类
- Serial、Parallel、CMS、G1、ZGC、Shenandoah
- 每个收集器适用的场景、优缺点
第五阶段:JVM 性能调优与诊断
目标:掌握常用 JVM 参数设置与性能调优方法
1. JVM 常用参数 学习JVM参数
- 堆大小设置:
-Xms
、-Xmx
- 栈大小:
-Xss
- GC 相关参数:
-XX:+UseG1GC
、-XX:+PrintGCDetails
2. GC 日志分析 学习GC日志
- 查看 GC 类型与停顿时间
jstat
、jmap
、jstack
等工具实战
3. 内存溢出排查 学习内存溢出排查
- 常见 OOM 场景及解决方案
- 堆转储文件分析(
heap dump
) - 使用 MAT、VisualVM、JProfiler 等工具
第六阶段:字节码与执行引擎
目标:理解字节码结构与 JVM 执行原理
1. 字节码结构 学习字节码结构
- .class 文件结构
- 常量池、方法表、字段表
2. 指令执行方式 学习指令执行方式
- 解释执行(Interpreter)
- 即时编译(JIT)
3. HotSpot 虚拟机优化 学习虚拟机优化
- 方法内联
- 动态编译与优化回退(OSR)
- 编译器:C1、C2、Graal
第七阶段:高级面试专题
目标:掌握面试中常被问到的 JVM 场景题与底层问题
1. 面试高频题目整理 学习高频面试精讲1
- Java 内存模型(JMM)与 volatile 可见性
- 对象创建过程(new 到内存分配)
- StringTable 与常量池机制
- 类加载的双亲委派原理及破坏方式
- GC 日志分析能力
- 各类 OOM 情况排查策略
2. 项目实战相关 学习高频面试精讲2
- 如何定位内存泄漏?
- 如何优化服务的 GC 停顿时间?
- JVM 调优有哪些手段?结合项目怎么做?
附录:学习资料推荐
官方与权威资料
- 《深入理解 Java 虚拟机(周志明)》
- OpenJDK 官网与 HotSpot 源码
- Java Performance Tuning Guide
实践工具
- VisualVM / MAT / JFR(Java Flight Recorder)
- Arthas(阿里开源诊断工具)
- jstack / jmap / jstat / jcmd