JVM 知识文库 — 设计文档
状态:✅ 已确认,批次 1 实施中 定位:大厂 Java 面试 · JVM 核心知识体系
一、总体架构
📁 JVM-Knowledge-Base/
│
├── 📁 01-字节码与Class文件/ ← 批次 1
│ ├── 00-字节码索引.md
│ ├── 01.1-Class文件结构.md
│ ├── 01.2-字节码指令集概览.md
│ ├── 01.3-实战javap反汇编分析.md
│ └── 01.4-ASM与Javassist字节码操作入门.md
│
├── 📁 02-类加载机制/ ← 批次 1
│ ├── 00-类加载索引.md
│ ├── 02.1-类加载生命周期.md
│ ├── 02.2-双亲委派模型与打破.md
│ ├── 02.3-自定义类加载器实战.md
│ ├── 02.4-Tomcat与Spring类加载分析.md
│ └── 02.5-OSGI与SPI模块化.md
│
├── 📁 03-运行时数据区/ ← 批次 1
│ ├── 00-运行时数据区索引.md
│ ├── 03.1-程序计数器.md
│ ├── 03.2-Java虚拟机栈.md
│ ├── 03.3-本地方法栈.md
│ ├── 03.4-Java堆.md
│ ├── 03.5-方法区与元空间.md
│ ├── 03.6-运行时常量池.md
│ └── 03.7-直接内存.md
│
├── 📁 04-对象分配与内存布局/ ← 批次 2
├── 📁 05-GC机制/ ← 批次 2
├── 📁 06-JVM调优与排查/ ← 批次 3
├── 📁 07-执行引擎与JIT/ ← 批次 3
├── 📁 08-Java内存模型与并发/ ← 批次 4
├── 📁 09-前沿与新特性/ ← 批次 4
└── 📁 面试专题/ ← 批次 4二、笔记模板
导航索引页(00-XX索引.md)
---
aliases: [中文别名, 英文别名]
tags: [JVM, 子领域, 面试]
created: 2026-06-15
---
# 0X - 板块标题
> **定位**:板块在 JVM 体系中的位置
> **面试高频度**:⭐⭐⭐⭐
## 📖 子专题导航
| # | 主题 | 面试频率 | 说明 |
|---|------|---------|------|
| ... |
## 🧠 知识全景图
(ASCII 架构图)
## 🔑 核心考点速记
(表格 — 2-3 个最高频考点精简版)深度原理页(0X.X-主题名.md)
---
aliases: [中文别名]
tags: [JVM, 子领域, 面试]
created: 2026-06-15
---
# 0X.X - 主题名
> **面试高频度**:⭐⭐⭐⭐⭐
> **考查方式**:XXX
## 一、这是什么?为什么需要它?
(定位问题本质 — "JVM 为什么要 XXX?")
## 二、原理拆解
(为什么有这个 → 在系统中起什么作用 → 结构图解)
## 三、图解全景
(ASCII 架构图 / 内存布局图 / 流程图)
## 四、实战验证
(javap 输出分析 / 代码示例 / 调优案例)
## 五、面试视角
(高频追问表格 — 理解原理后答案自然得出)
## 📚 相关链接
- [[上游主题]]
- [[下游主题]]
- ← 返回 [[00-XX索引]]三、内容原则
| 优先级 | 原则 | 说明 |
|---|---|---|
| 1 | 原理优先 | 先讲清楚"为什么",建立心智模型 |
| 2 | 图解驱动 | ASCII 架构图、流程图、内存布局图——让读者"看到"原理 |
| 3 | 面试佐证 | 面试题作为原理的巩固检验,非主线 |
| 4 | 表格对比 | 对比类知识用表格 |
| 5 | Wiki 互联 | 跨板块引用用 [[wiki-link]] |
| 6 | 参数速查 | 调优板块重点做参数速查表 |
| 7 | 实战案例 | 排查方法论 + 真实案例 |
四、链接策略
| 链接类型 | 规则 | 示例 |
|---|---|---|
| 向下链接 | 正文引用后续详述主题用 [[ ]] | [[02.1-类加载生命周期]] |
| 向上回链 | 子笔记末尾加入返回索引链接 | ← 返回 [[00-字节码索引]] |
| 跨板块链接 | GC 链对象布局、调优链 GC 收集器 | 详见 [[04.2-对象内存布局]] |
| 面试汇聚 | 面试 100 题每道链接回原理笔记 | 详见 [[05.3-垃圾收集器详解]] |
五、交付批次
| 批次 | 板块 | 笔记数 | 核心链路 |
|---|---|---|---|
| 1 | 01 字节码 + 02 类加载 + 03 运行时数据区 | 19 | Class 文件 → 加载 → 内存 |
| 2 | 04 对象分配 + 05 GC 机制 | ~11 | 对象创建 → 布局 → 回收 |
| 3 | 06 调优排查 + 07 执行引擎与 JIT | ~12 | 排查定位 → JIT 提速 |
| 4 | 08 JMM 并发 + 09 前沿新特性 + 面试专题 | ~10+ | 进阶收官 + 综合演练 |
六、批次 1 内容大纲
01 — 字节码与 Class 文件
| 笔记 | 核心原理 | 关键图解 |
|---|---|---|
| 00-索引 | Class 文件在 JVM 体系中的位置 | 源码→编译→加载→执行 全链路图 |
| 01.1-Class文件结构 | 每个字段设计动机(魔数防伪、版本号控制、常量池解耦) | 十六进制结构图 + 偏移量标注 |
| 01.2-字节码指令集 | 栈式 vs 寄存器式取舍;指令分类逻辑 | 栈帧操作示意图 |
| 01.3-javap实战 | 从源码到字节码的翻译规则 | javap -verbose 逐区域标注 |
| 01.4-ASM与Javassist | 直接操作字节码 vs 源码字符串操作 | ASM 事件模型流程图 |
02 — 类加载机制
| 笔记 | 核心原理 | 关键图解 |
|---|---|---|
| 00-索引 | 类加载在 JVM 运行中的角色 | 类加载生命周期时间线 |
| 02.1-生命周期 | 7 阶段为什么交错而非串行 | 阶段交错并行图 |
| 02.2-双亲委派 | 委派的安全动机;打破的 SPI 动机 | 三层 ClassLoader 层级图 |
| 02.3-自定义类加载器 | findClass vs loadClass 职责分离 | 加载流程图 |
| 02.4-Tomcat与Spring | Web 隔离需求;Spring Boot fat jar 机制 | Tomcat 多级 ClassLoader 树 |
| 02.5-OSGI与SPI | 层级委派 → 网状依赖 | OSGI Bundle 依赖网对比图 |
03 — 运行时数据区
| 笔记 | 核心原理 | 关键图解 |
|---|---|---|
| 00-索引 | 线程私有 vs 共享的划分逻辑 | JVM 内存全景布局图 |
| 03.1-程序计数器 | 唯一不 OOM 的区域;线程切换恢复机制 | CPU 线程切换 → PC 指向图 |
| 03.2-虚拟机栈 | 栈帧四部件协作原理 | 栈帧结构图 + 调用链帧栈图 |
| 03.3-本地方法栈 | HotSpot 实际合二为一 | JNI 调用栈切换图 |
| 03.4-堆 | 分代设计逻辑 | 堆分代结构图 + 对象流动方向 |
| 03.5-方法区与元空间 | PermGen→Metaspace 的变迁动机 | 对比图 + StringTable 变迁 |
| 03.6-运行时常量池 | 静态模板 vs 动态实例 | 符号引用→直接引用 转换图 |
| 03.7-直接内存 | NIO 用直接内存避免复制 | 堆 I/O vs 直接 I/O 路径对比 |
设计确认时间: 2026-06-15