HotSpot 混合执行:字节码先解释执行,统计调用与循环回边次数,热点代码交给 JIT 编译成机器码。分层编译(Tiered Compilation,JDK 8 起默认)把编译分五级:0 层解释执行 → 1~3 层 C1(客户端编译器,编译快、优化保守,第 3 层带性能分析)→ 4 层 C2(服务端编译器,编译慢、优化激进)。方法先在 C1 快速编译获得不错的性能,持续热点再升级到 C2 深度优化,平衡启动速度与峰值性能。
热点识别:方法调用计数器(-XX:CompileThreshold,C2 默认 10000)与回边计数器(循环),带半衰期衰减——一段时间不热就清零,保证「近期热点」才编译。C2 的激进优化基于 C1 收集的性能画像:方法内联(最重要,是其他优化的前提)、去虚拟化(单态调用点直接内联虚方法)、逃逸分析、循环展开、分支预测剪除。优化建立在假设上,假设被打破(如出现新的子类实现)就**逆优化(deoptimization)**回解释执行——所以 JIT 编译是投机式的。追问方向:OSR(On-Stack Replacement)对长循环方法的处理、AOT(jaotc 已移除/GraalVM Native Image)与 JIT 的取舍、-XX:+PrintCompilation 的输出解读。
(约 440 字)