文档目录

第 2 章配套代码索引

这一章的代码分两类:验证机制的实验(让你亲眼看到 JIT/GC/协程的行为)和可直接抄用的配置(JMH 骨架)。 它们运行在你的开发机上,数字只用于量级对比,不能用于工程决策。

一、文件清单

文件 对应小节 内容
01-execution-tiers.md 2.1 四种执行形态 台阶式提升演示 + PrintCompilation 解读
02-jit-optimizations-and-deopt.md 2.2 JIT 优化与去优化 单态/双态/巨态调用点对比,诱发去优化
03-microbenchmark-traps.md 2.3 微基准四大陷阱 四个陷阱各写一个坏版本
04-warmup-steady-coldstart.md 2.4 预热、稳态与冷启动 用滚动 CV 自动判定稳态 + 冷启动测量
05-memory-and-gc.md 2.5 内存与 GC 分配速率测量、GC 日志解读、Humongous 演示
06-concurrency-primitives.md 2.6 并发原语成本 原语成本表 + 伪共享对照实验
07-coroutines-cost-model.md 2.7 协程开销模型 协程成本 + 调度器饥饿实验(最重要)
08-jmh-and-kotlinx-benchmark.md 2.8 JMH 与 kotlinx-benchmark 完整可运行的基准工程配置
09-lab2.md 2.9 Lab 2 Lab 2 的实验代码骨架

二、运行准备

这些实验大多是单文件 main 程序,放在 src/main/kotlin/lesson02/ 下即可运行:

./gradlew build
java -cp build/classes/kotlin/main lesson02.ExecutionTiersKt

运行 JVM 相关的实验时,建议统一加上这些参数(第 2 章的很多现象需要它们才看得到):

java -XX:+PrintCompilation \
     -Xlog:gc*:file=gc.log:time,uptime,level,tags \
     -cp build/classes/kotlin/main lesson02.ExecutionTiersKt

各实验需要的 -XX 参数,会在对应文件里单独说明。

三、三条纪律

  1. 每个实验跑 3 次。单次结果在开发机上没有意义。
  2. 先猜再看。读代码前猜一下输出,猜错的地方才是你真正学到东西的地方。
  3. 改参数再跑一遍。参数的敏感性比默认输出更有教学价值。

四、容易踩的环境坑

坑 表现 解决
后台进程干扰 数字波动 30%+ 关掉浏览器、IDE 索引、备份任务
CPU 降频 后跑的基准比先跑的慢 插电、设置 performance governor
没有 fork 隔离 第二个基准受第一个的 profile 影响 每个实验独立进程运行
编译器和 JMH 抢 CPU 结果抖动大 JMH 会自己处理;裸计时实验无法避免
macOS 上部分 /proc 参数缺失 脚本报 n/a 正常现象,换 Linux 环境做严格测量