《Java 虚拟机原理与性能调优》全 31 篇,是 Java 四卷本的收官卷。卷三把
libraryd的类型、反射、类加载、并发和性能工具拆开讲了一遍;卷四换一个视角,把同一个服务当成观测对象:第 1–2 章建立研究方法、实验口径与类文件基础,第 3–4 章看内存布局与执行引擎,第 5–6 章讲垃圾回收的原理与调优,第 7–8 章做内存与线程诊断,第 9–10 章收束到启动加速、压测、调优决策与容量规划。
本页是《Java 虚拟机原理与性能调优》的全书目录:按章节顺序列出全部 31 篇,点击标题直达正文。也可以从各节末尾的「阅读导航」按顺序通读,或先看目录篇 里的三条学习路径。
全书概览
| 项目 | 内容 |
|---|---|
| 书稿 | 《Java 虚拟机原理与性能调优》 |
| 篇数 | 31 篇(正文 10 章 30 节 + 目录篇) |
| 领域 | JVM 运行时、垃圾回收、JIT、诊断与性能工程 |
| 贯穿项目 | libraryd —— 不新增业务,只做观测、压测与调优 |
| 阅读方式 | 从目录篇 进入按顺序通读,或按症状跳读 |
| 主线版本 | JDK 25 LTS(Temurin 25.0.5+8)、Maven 3.9.12 |
| 关键依赖 | JOL 0.17、Byte Buddy 1.18.16、JMH 1.37 |
| 上级专题 | 书稿专题 |
全书目录
前置
| 节 | 文章 | 核心内容 |
|---|---|---|
| — | 目录与学习路径 | 全书导航页:三条路径、十章结构、实验口径与项目状态 |
第一部分:方法与数据(第 1–2 章)
| 节 | 文章 | 核心内容 |
|---|---|---|
| 1.1 | 1.1 从现象到机制:JVM 研究的四条路径 | 现象、假设、实验、证据;jcmd、flags、日志与转储 |
| 1.2 | 1.2 建立可复现的实验环境:CPU、堆与固定参数 | 固定 JDK、CPU、堆与 GC;warmup、重复与分位 |
| 1.3 | 1.3 观测工具全景:jcmd、JFR、GC 日志与 JMC | 工具分工、开销、RuntimeProbe 与 JFR 事件 |
| 2.1 | 2.1 类文件结构:常量池、方法表与属性 | javap -v、class 版本 69、record 的 invokedynamic |
| 2.2 | 2.2 类加载过程:加载、链接、初始化与双亲委派 | -Xlog:class+load、类加载器层次、类标识 |
| 2.3 | 2.3 字节码执行模型:栈帧、局部变量表与操作数栈 | javap -c、五类调用指令、异常表与局部变量槽 |
第二部分:内存与执行(第 3–4 章)
| 节 | 文章 | 核心内容 |
|---|---|---|
| 3.1 | 3.1 运行时数据区:堆、栈、元空间与代码缓存 | NMT、VM.metaspace、各区域上限与内存预算 |
| 3.2 | 3.2 对象布局:对象头、压缩指针与字段重排 | JOL、Mark Word、压缩 oops、对齐与字段重排 |
| 3.3 | 3.3 分配与 TLAB:指针碰撞、线程本地缓冲与大对象 | TLAB 日志、PLAB、Humongous、分配速率 |
| 4.1 | 4.1 解释执行与分层编译:C1、C2 与阈值 | PrintCompilation、tier 0–4、代码缓存与 OSR |
| 4.2 | 4.2 即时编译优化:内联、逃逸分析与去虚拟化 | PrintInlining、单态/巨态调用、标量替换 |
| 4.3 | 4.3 反优化与 OSR:代码什么时候退回解释器 | uncommon trap、类层次变化、jdk.Deoptimization |
第三部分:垃圾回收(第 5–6 章)
| 节 | 文章 | 核心内容 |
|---|---|---|
| 5.1 | 5.1 可达性分析与引用类型:从 GC Root 到 Cleaner | GC Roots、强/软/弱/虚引用、ReferenceQueue |
| 5.2 | 5.2 分代假设与回收算法:复制、标记与整理 | 弱分代假设、三色标记、卡表与记忆集 |
| 5.3 | 5.3 收集器谱系:Serial、Parallel、G1、ZGC 与 Shenandoah | 目标、停顿、吞吐与选型边界 |
| 6.1 | 6.1 GC 日志解析:统一日志、停顿指标与分配失败 | -Xlog:gc*、字段含义、轮转与汇总脚本 |
| 6.2 | 6.2 G1 调优:Region、Humongous 与 Mixed GC | Region 4 MB、Humongous、IHOP、暂停目标 |
| 6.3 | 6.3 ZGC 与低延迟取舍:染色指针、读屏障与停顿 | 分代 ZGC、并发重定位、吞吐代价与对照 |
第四部分:诊断与运行时(第 7–8 章)
| 节 | 文章 | 核心内容 |
|---|---|---|
| 7.1 | 7.1 堆转储与支配树:从 hprof 到保留大小 | GC.heap_dump、直方图、shallow/retained size |
| 7.2 | 7.2 内存泄漏定位:增长曲线、直方图与引用链 | 泄漏 demo、HeapDumpOnOutOfMemoryError、引用链 |
| 7.3 | 7.3 元空间与直接内存:类生成与堆外泄漏 | Metaspace OOM、MaxDirectMemorySize、类卸载 |
| 8.1 | 8.1 线程栈与转储:从 jstack 到 JSON 线程容器 | Thread.print、JSON dump、死锁与虚拟线程容器 |
| 8.2 | 8.2 锁的运行时实现:对象头、Monitor 与膨胀 | Mark Word、轻量级/重量级锁、JFR Monitor 事件 |
| 8.3 | 8.3 虚拟线程的运行时:Continuation、载体与调度 | mount/unmount、载体池、JEP 491 与剩余 pin 场景 |
第五部分:启动、压测与决策(第 9–10 章)
| 节 | 文章 | 核心内容 |
|---|---|---|
| 9.1 | 9.1 启动耗时分解:类加载、解释执行与首请求 | -Xlog:init、类加载计数、冷启动与首请求 |
| 9.2 | 9.2 CDS 与 AppCDS:共享归档的构建与验证 | ArchiveClassesAtExit、归档失效条件与收益 |
| 9.3 | 9.3 AOT 缓存与 Native Image:边界与取舍 | AOTMode 三阶段、目录限制、Native Image 取舍 |
| 10.1 | 10.1 压测设计与指标口径:吞吐、分位与协调缺失 | ab、p50/p95/p99、Little’s law、warmup |
| 10.2 | 10.2 一次完整的调优:从现象到参数 | 现象→证据→假设→改动→回归的完整链条 |
| 10.3 | 10.3 建立回归基线与容量规划 | 基线 JSON、阈值、容量模型与扩容触发 |
怎么读这套书
- 按顺序:从目录篇 开始,每节末尾有阅读导航。
- 按症状:目录篇给出「线上症状 → 先定位」「GC 与内存 → 系统学」「启动与容量 → 工程收尾」三条路径。
- 按项目:从第 1 章的
RuntimeProbe开始,跟着每节「在 libraryd 里落地」改代码、跑命令。
与站内其他内容的关系
- 《Java 编程入门》
:语言基础与
libraryCLI。 - 《Java 编程实战》
:工程化与
libraryd服务。 - 《Java 高级编程》 :语言机制、并发与 JMH/JFR;卷四直接承接它的项目与基线。
- Spring Boot 三部曲 :框架层的完整路径。