在 CentOS(或其他 Linux 发行版)中“Java 编译原理”,本质上和平台无关,因为 Java 的编译过程是由 JDK 决定的,而不是操作系统。CentOS 只是提供了一个运行 JDK 的 Linux 环境。
下面从 整体流程 → CentOS 下具体执行 → Java 编译本质 三个层面说明。
Java 是 “一次编写,到处运行” 的语言,核心在于:
源代码(.java) → 字节码(.class) → JVM 解释/编译执行
Hello.java
使用 javac:
javac Hello.java
编译原理核心:
.class)⚠️ 注意:
javac 不会生成机器码在 CentOS 上:
javac → Java 编译器java → JVM 启动器常见 JDK:
查看:
java -version
javac -version
vim Hello.java
public class Hello {
public static void main(String[] args) {
System.out.println("Hello CentOS");
}
}
编译:
javac Hello.java
生成:
Hello.class
运行:
java Hello
javac 内部流程:
.java 源文件
↓
词法分析(Token)
↓
语法树(AST)
↓
语义分析(类型检查)
↓
字节码生成
↓
.class 文件
.class 文件包含:
可用:
javap -c Hello
查看字节码
运行 java Hello 时:
.class
↓
类加载器(ClassLoader)
↓
字节码校验
↓
解释执行(Interpreter)
↓
JIT 编译(热点代码 → 机器码)
CentOS 上:
| 项目 | CentOS | Windows |
|---|---|---|
| 编译结果 | .class |
.class |
| JVM | HotSpot | HotSpot |
| 系统调用 | Linux | Windows |
| 可执行文件 | 无 | 无 |
✅ 编译结果完全一样
❌ Java 在 CentOS 编译成 Linux 程序
✅ Java 编译成 JVM 字节码
❌ javac 直接生成机器码
✅ JIT 在运行时生成机器码
在 CentOS 中,Java 编译原理是:JDK 的 javac 将 .java 编译为与平台无关的 JVM 字节码,由 CentOS 上的 JVM 加载并执行,最终通过 JIT 编译为 Linux 机器码运行。
如果你愿意,我也可以讲:
javac 源码级流程