请描述 Java 程序从源码到最终执行的完整过程,包括编译、类加载、字节码解释执行和 JIT 编译等关键阶段。
考察说明
考察对 Java 程序执行全流程的理解,包括编译、类加载和运行时的核心机制。
回答思路
- 【回答框架 1】Java 程序执行流程分为编译阶段和运行阶段。编译阶段由 javac 将 .java 源文件编译为平台无关的字节码(.class 文件),字节码指令集基于栈。
- 【回答框架 2】运行阶段首先由类加载器(如 Bootstrap、Extension、Application)加载 .class 文件,经过加载、验证、准备、解析、初始化五个阶段,将字节码转换为 JVM 内部数据结构。
- 【回答框架 3】字节码执行由解释器逐条解释,速度较慢;热点代码会触发 JIT 编译器(如 C1/C2)将其编译为本地机器码,提升执行效率。
- 【回答框架 4】执行过程依赖运行时数据区:程序计数器、虚拟机栈、本地方法栈、堆和方法区(元空间)。对象实例分配在堆,类元信息存储在方法区。
- 【关键点 1】Java 先编译后解释,具备跨平台能力。
- 【关键点 2】类加载机制的五阶段流程。
- 【关键点 3】JIT 编译对热点代码的优化。
- 【关键点 4】执行引擎结合解释器和 JIT 编译器。
- 【易错点 1】混淆编译阶段与运行时阶段,字节码是中间产物。
- 【易错点 2】忽视类加载的验证和准备阶段。
- 【易错点 3】误认为所有代码都被 JIT 编译。