JIT 编译优化:C1/C2、逃逸分析与方法内联
本文是《JVM调优实战》专栏第 35 讲。
引言
如果你曾经用java -version看过 JVM 的启动参数,可能会注意到一个细节:OpenJDK/HotSpot 的默认模式是 “mixed mode”。这个 “mixed” 指的是什么?答案是:解释执行与编译执行的混合模式,这正是 JIT(Just-In-Time,即时编译)技术的核心体现。
打个比方,解释执行就像你拿着词典逐句翻译英文文章——每读一句都要翻词典,虽然立即就能开始,但效率低下。JIT 编译则像一个聪明的翻译官,他在翻译过程中默默记录哪些句子反复出现(热点代码),然后把这些句子整段背下来(编译成机器码),下次遇到直接脱口而出,不再需要翻词典。
JIT 编译器是 JVM 性能最核心的"加速器"之一。它将 JVM 从"慢速的解释器"蜕变为"接近 C/C++ 执行速度的运行时环境"。本讲我们将深入 JIT 编译的内部机制,理解热点探测、分层编译、方法内联与逃逸分析这些关键优化技术。
HotSpot 名称的来源:热点探测
HotSpot 这个名字本身就是对 JIT 编译哲学的最佳概括——“只编译热点”。JVM 不会在启动时编译所有代码,因为这会导致启动极慢。相反,它采用了一种精巧的策略:先解释执行,同时监控执行频率,当某段代码的执行次数超过阈值时,才触发 JIT 编译。