[ 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 类型与停顿时间
  • jstatjmapjstack 等工具实战

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 调优有哪些手段?结合项目怎么做?

附录:学习资料推荐

官方与权威资料

实践工具

  • VisualVM / MAT / JFR(Java Flight Recorder)
  • Arthas(阿里开源诊断工具)
  • jstack / jmap / jstat / jcmd
去1:1私密咨询