《Java 虚拟机原理与性能调优》目录与学习路径

《Java 虚拟机原理与性能调优》全 31 篇的目录与学习路径:10 章 30 节,从研究方法、类文件与对象布局,到 JIT、GC、内存诊断、线程与锁、启动加速和综合压测调优,给出三条按症状跳读的路线、统一实验口径、项目状态、机器口径与各卷衔接。

本页是《Java 虚拟机原理与性能调优》的目录与学习路径。全书 31 篇:10 章 30 节,加这一篇目录。主线不是再写一个业务功能,而是把卷三留下的 libraryd 当成观测对象:每一个结论都要能落到一条命令、一份日志或一个转储上。

这本书回答什么

前三卷把 library 从命令行程序长成了 libraryd 服务,又在卷三把类型、反射、类加载、并发和性能工具拆开讲了一遍。卷四换一个视角:同一段代码,JVM 在运行时到底做了什么。

具体是五个问题:

  1. 遇到延迟抖动、吞吐下降、内存增长,先看什么、怎么证明。
  2. 一个 .class 文件如何变成内存里的类,一个对象如何排布在堆上。
  3. 解释器、C1、C2 如何接力,内联、逃逸分析、去虚拟化在什么条件下生效,什么时候又会反优化。
  4. 对象什么时候被回收,G1 与 ZGC 的停顿从哪里来,GC 日志每一列是什么意思。
  5. 堆、元空间、直接内存、线程栈、启动时间和容量,怎么测量、怎么设上限、怎么做回归。

全书概览

项目内容
书稿《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(按章使用)
机器口径Apple M1 Pro,10 核,32 GB,macOS 26.3,默认 G1
上级专题书稿专题

三条学习路径

全书按章顺序读是最完整的路径,但真实工作通常从一个症状开始。下面三条路径可以跳读。

路径一:线上症状 → 先定位

适合「服务变慢了 / 内存涨了 / 线程卡住了」的排障场景。

  1. 1.1 从现象到机制 :先建立「现象—假设—实验」的纪律。
  2. 1.3 观测工具全景 :知道每个工具回答什么问题。
  3. 6.1 GC 日志解析 :先把停顿和分配看清。
  4. 7.1 堆转储与支配树 / 7.2 内存泄漏定位 :内存问题往下钻。
  5. 8.1 线程栈与转储 :线程卡住时看栈。
  6. 10.2 一次完整的调优 :把证据变成参数。

路径二:GC 与内存 → 系统学

适合要选收集器、设堆上限、解释 GC 日志的读者。

  1. 3.1 运行时数据区 :先知道内存分几块。
  2. 3.2 对象布局 / 3.3 分配与 TLAB :对象怎么放、怎么分配。
  3. 5.1 可达性分析与引用类型 :谁会被回收。
  4. 5.2 分代假设与回收算法 / 5.3 收集器谱系 :算法与收集器。
  5. 6.1 GC 日志解析 → 6.2 G1 调优 → 6.3 ZGC 与低延迟取舍 。
  6. 7.3 元空间与直接内存 :堆外也要设上限。

路径三:启动与容量 → 工程收尾

适合做镜像、Serverless、弹性扩容和容量规划的读者。

  1. 2.1 类文件结构 / 2.2 类加载过程 :启动时到底加载了什么。
  2. 4.1 分层编译 :为什么冷启动慢、预热后快。
  3. 9.1 启动耗时分解 → 9.2 CDS 与 AppCDS → 9.3 AOT 缓存与 Native Image 。
  4. 10.1 压测设计与指标口径 → 10.3 建立回归基线与容量规划 。

十章一览

第一部分:方法与数据(第 1–2 章)

章节核心内容
1 方法论1.1 从现象到机制现象、假设、实验、证据;四条研究路径
1.2 建立可复现的实验环境CPU、堆、GC、启动参数固定;单变量对照
1.3 观测工具全景jcmd、JFR、GC 日志、JMX 与 JMC 的分工
2 类加载与字节码2.1 类文件结构常量池、方法表、属性、class 版本 69
2.2 类加载过程加载、链接、初始化、双亲委派与类标识
2.3 字节码执行模型栈帧、局部变量表、操作数栈与调用指令

第二部分:内存与执行(第 3–4 章)

章节核心内容
3 运行时数据区3.1 运行时数据区堆、栈、元空间、代码缓存、直接内存
3.2 对象布局对象头、压缩指针、字段重排与对齐
3.3 分配与 TLAB指针碰撞、TLAB、PLAB、Humongous
4 执行引擎与 JIT4.1 分层编译解释器、C1、C2、阈值与代码缓存
4.2 即时编译优化内联、逃逸分析、标量替换、去虚拟化
4.3 反优化与 OSRuncommon trap、类层次变化、栈上替换

第三部分:垃圾回收(第 5–6 章)

章节核心内容
5 垃圾回收原理5.1 可达性分析与引用类型GC Root、强/软/弱/虚引用、Cleaner
5.2 分代假设与回收算法复制、标记-清除、标记-整理、记忆集
5.3 收集器谱系Serial、Parallel、G1、ZGC、Shenandoah
6 GC 调优与观测6.1 GC 日志解析统一日志、停顿字段、分配失败与日志轮转
6.2 G1 调优Region、Humongous、IHOP、Mixed GC
6.3 ZGC 与低延迟取舍染色指针、读屏障、并发重定位与代价

第四部分:诊断与运行时(第 7–8 章)

章节核心内容
7 内存问题诊断7.1 堆转储与支配树hprof、直方图、shallow/retained size
7.2 内存泄漏定位增长曲线、引用链、OOM dump
7.3 元空间与直接内存类生成、类卸载、堆外泄漏与上限
8 线程与锁运行时8.1 线程栈与转储jstack、JSON 线程容器、死锁
8.2 锁的运行时实现Mark Word、Monitor、轻量级锁膨胀
8.3 虚拟线程的运行时Continuation、载体线程、调度与 pinning

第五部分:启动、压测与决策(第 9–10 章)

章节核心内容
9 启动加速9.1 启动耗时分解类加载、解释执行、JIT 与首请求
9.2 CDS 与 AppCDS基础归档、应用归档、失效条件
9.3 AOT 缓存与 Native ImageAOTMode 三阶段、能缓存什么、边界
10 综合调优实战10.1 压测设计与指标口径吞吐、分位、协调缺失、Little’s law
10.2 一次完整的调优现象→证据→假设→参数→回归
10.3 建立回归基线与容量规划基线 JSON、阈值、容量模型与边界

项目状态

卷四不新增业务功能,只在 libraryd 上增加观测与压测设施。

章libraryd 状态
1RuntimeProbe、scripts/jvm/collect.sh;建立观测基线
2Book / Loan 的 class 文件与字节码;插件类加载器复用
3LayoutLab;Book / Loan 的内存占用核算
4FinePolicy 热方法、JitLab;内联与去虚拟化实验
5LoanCache 的引用类型选择;收集器对照
6GC 日志采集、G1/ZGC 参数组、gc-summary.py
7泄漏 demo、HeapDumpOnOutOfMemoryError、元空间/直接内存上限
8线程转储、锁竞争实验、DashboardService 虚拟线程
9启动脚本、AppCDS/AOT 归档、首请求耗时
10libraryd-loadtest、压测报告、基线 JSON 与容量模型

实验口径

书里的「本机输出」统一来自下面这套环境;如果你的机器不同,绝对值会变,但方向和字段含义不变。

export JAVA_HOME=~/.jdks/jdk-25.0.5+8/Contents/Home
export PATH="$JAVA_HOME/bin:$PATH"
java -version
# openjdk version "25.0.5" 2026-10-20 LTS
# OpenJDK Runtime Environment Temurin-25.0.5+8 (build 25.0.5+8-LTS)
Apple M1 Pro,10 核,32 GB,macOS 26.3 (25D125)
默认 G1,压缩 oops,默认 MaxHeapSize 8 GB,G1 Region 4 MB

三条纪律:

  • 一次只改一个变量。堆、GC、CPU 数、负载、warmup 任何一项变了,数字就不能直接比。
  • 单次运行只说明「这次发生了什么」,不能当结论;至少重复三次并给分布。
  • 没有命令和输出的数字不写;工具没装的,只讲用法,不编输出。

与站内其他内容的关系

怎么读

  • 按顺序:从 1.1 开始,每节末尾有阅读导航。
  • 按症状:用上面的三条路径,从对应章节进入。
  • 按项目:把每节「在 libraryd 里落地」的类落到自己的服务里,先跑通命令,再改参数。

全书没有附录;需要的命令在正文里随用随查,卷三的附录 D 诊断命令清单 可以作为补充。

继续阅读

探索更多技术文章

浏览归档,发现更多关于系统设计、工具链和工程实践的内容。

全部文章 返回首页

「java」更多文章

  1. 《Netty 高性能网络编程》15.3 linkd-v2 验收与复盘
  2. 《Netty 高性能网络编程》15.2 限流、超时与降级
  3. 《Netty 高性能网络编程》15.1 网关路由与转发