Skip to content

编译型 vs 解释型

学语言时经常听到「编译型」和「解释型」的区别。Java 到底是什么型?为什么 Java 既要编译又要运行?理解这个问题,才能真正理解 Java 的性能特性和跨平台原理。

三种执行模式对比

模式执行流程优点缺点代表语言
编译型源代码 → 机器码 → 执行执行效率高跨平台差C/C++
解释型源代码 → 逐行解释执行跨平台好执行效率低Python
混合型源代码 → 字节码 → JVM执行跨平台+优化启动较慢Java

Java 的混合模式

Java 采用「编译 + 解释」的混合模式:

源代码(.java)
    ↓ javac 编译
字节码(.class)  ←  平台无关的中间代码
    ↓ java 运行
JVM 解释/编译执行  ←  JIT 编译(热点代码)

javac 将源代码编译为字节码,JVM 执行字节码。

JVM 的执行优化

早期 JVM 纯解释执行,每次执行都需要解释,开销大。现代 JVM 的 JIT(即时编译)编译器将热点代码编译为机器码:

java
void process() {
    // 循环执行 10000 次,JVM 判定为热点代码
    for (int i = 0; i < 10000; i++) {
        doWork(i);
    }
}
// 热点代码被 JIT 编译为机器码,性能大幅提升

分层编译策略:Tier 0 解释执行(启动快)→ Tier 1 C1 编译(快速编译)→ Tier 2 C2 编译(深度优化)。

性能对比

语言典型执行效率说明
C/C++100%编译为高度优化的机器码
Java (JIT 优化后)70-90%预热后接近原生性能
Python5-20%解释执行

为什么 Java 不直接编译为机器码?如果直接编译为机器码,就失去了跨平台能力。Java 选择牺牲一点启动性能,换取「一次编译,到处运行」的能力。

一图总结

特点编译型解释型Java 混合型
执行效率中高
跨平台性最好
启动速度较慢
内存管理手动解释器管理自动 GC

后续可阅读:跨平台原理Java 垃圾回收简介Java 程序运行机制

基于 VitePress 构建