🧠 内存模型与对象
JVM 运行时数据区划分;堆/栈/方法区的职责边界;对象创建与内存布局;指针压缩与对象头结构。
第1阶段 内存模型 → JVM内存结构、对象布局第2阶段 垃圾回收 → GC算法、收集器第3阶段 类加载机制 → 双亲委派、类加载器第4阶段 JIT编译 → 热点代码、逃逸分析第5阶段 线上排查 → OOM定位、CPU诊断 JVM │ ┌───────────┬───────────┼───────────┐ ▼ ▼ ▼ ▼ 内存模型 垃圾回收 类加载 JIT编译 │ │ │ │• 堆/栈/方法区 • 标记清除 • 双亲委派 • 热点探测• 对象布局 • 复制算法 • 类加载器 • 逃逸分析• 指针压缩 • G1/ZGC • 模块化 • 栈上分配• 元空间 • 分代收集 • 破坏场景 • JVM参数| 专题 | 考察频率 | 难度 | 核心能力 |
|---|---|---|---|
| 内存模型 | ★★★★★ | 高 | 对象分配 |
| 垃圾回收 | ★★★★★ | 高 | G1/ZGC |
| 类加载 | ★★★★☆ | 中 | 双亲委派 |
| JIT编译 | ★★★☆☆ | 高 | 逃逸分析 |
| 线上排查 | ★★★★☆ | 高 | 问题定位 |
🧠 内存模型与对象
JVM 运行时数据区划分;堆/栈/方法区的职责边界;对象创建与内存布局;指针压缩与对象头结构。
♻️ 垃圾回收算法与收集器
可达性分析与引用类型;标记-清除/复制/标记-整理算法;分代模型;G1/ZGC/Shenandoah 收集器对比。
📦 类加载机制
类加载的五个阶段;双亲委派模型的原理与破坏场景;自定义类加载器;模块化系统(JPMS)。
⚡ JIT 编译与性能调优
解释执行 vs JIT 编译;热点代码探测;逃逸分析与栈上分配;常用 JVM 参数与 GC 日志分析。
🔧 线上问题排查
OOM 类型与排查方法;CPU 飙高定位;GC 停顿(STW)分析;常用诊断工具 jmap/jstack/arthas。
| 专题 | 初级 | 中级 | 高级 | 代表问题 |
|---|---|---|---|---|
| 内存模型 | ⭐⭐⭐⭐ | ⭐⭐⭐⭐⭐ | ⭐⭐⭐⭐⭐ | 对象一定在堆上分配吗? |
| 垃圾回收 | ⭐⭐⭐⭐ | ⭐⭐⭐⭐⭐ | ⭐⭐⭐⭐⭐ | G1 和 ZGC 的区别?停顿时间如何控制? |
| 类加载 | ⭐⭐⭐ | ⭐⭐⭐⭐ | ⭐⭐⭐⭐⭐ | 双亲委派为什么能被打破?Tomcat 是怎么做的? |
| JIT 调优 | ⭐⭐ | ⭐⭐⭐⭐ | ⭐⭐⭐⭐⭐ | 逃逸分析是什么?对 GC 有什么影响? |
| 线上排查 | ⭐⭐⭐ | ⭐⭐⭐⭐⭐ | ⭐⭐⭐⭐⭐ | 如何排查 OOM?如何定位 CPU 100%? |
Java 源代码(.java) ↓ javac 编译字节码(.class)← 平台无关,"一次编写,到处运行"的关键 ↓ JVM 加载并执行机器码(CPU 直接执行)← JIT 编译热点代码为本地机器码
JVM 核心职责: ┌─────────────────────────────────────────┐ │ 类加载子系统 → 运行时数据区 → 执行引擎 │ │ ↑ ↑ ↑ │ │ .class 文件 内存管理与GC 解释/JIT │ └─────────────────────────────────────────┘┌──────────────────────────────────────────────────────┐│ JVM 进程 ││ ┌─────────────────────────────────────────────┐ ││ │ 堆(Heap)—— 线程共享 │ ││ │ Young Gen(Eden + S0 + S1) | Old Gen │ ││ └─────────────────────────────────────────────┘ ││ ┌──────────────┐ ┌──────────────────────────┐ ││ │ 方法区/元空间 │ │ 直接内存(堆外) │ ││ │ 线程共享 │ │ NIO ByteBuffer 等 │ ││ └──────────────┘ └──────────────────────────┘ ││ ┌──────────────────────────────────────────┐ ││ │ 线程私有区域 │ ││ │ 虚拟机栈 | 本地方法栈 | 程序计数器 │ ││ └──────────────────────────────────────────┘ │└──────────────────────────────────────────────────────┘| 版本 | 重要变化 |
|---|---|
| Java 8 | 永久代 → 元空间;Lambda/Stream;默认 Parallel GC |
| Java 9 | 模块化(JPMS);G1 成为默认 GC |
| Java 11 | ZGC 实验性引入;LTS 版本 |
| Java 17 | ZGC/Shenandoah 生产可用;Sealed Classes;LTS |
| Java 21 | ZGC 全面增强;虚拟线程(Project Loom)GA;LTS |
第1天 内存模型与对象 → 夯实基础,理解 JVM 的内存全景第2天 垃圾回收算法 → GC 是面试最高频,算法原理必须透彻第3天 垃圾收集器对比 → G1 vs ZGC 是中高级必问第4天 类加载机制 → 双亲委派和破坏场景是加分项第5天 JIT 与线上排查 → 综合能力体现,高级岗位必考