深入探索JVM垃圾回收:ARM服务器垃圾回收的挑战和优化
上QQ阅读APP看书,第一时间看更新

1.1.3 混合执行

解释执行实现简单,通常启动也比较快,但是性能低下;编译执行需要强大的编译器支持,编译实现复杂,但性能较高。混合执行融合解释执行和编译执行的优点(实际上混合执行还可以引入新的编译优化方式,即大家所熟知的Just-In-Time优化),程序在执行过程中既存在解释执行也存在编译执行,最典型的代表就是Java语言的执行。Java的执行过程可以概括为:

1)Java源代码首先由编译工具javac编译成字节码,字节码有固定的文件格式,称为Class文件,该类型的文件可以跨操作系统执行。

2)启动JVM(不同的系统JVM不同),JVM加载字节码,解释执行字节码。在解释执行的过程中如果发现字节码(更准确地说是字节码片段,如一个函数或者一个循环代码)执行频次高,会尝试将字节码直接编译成目标机器代码,待编译完成后使用编译优化后的机器代码替代解释执行。

Java程序的执行过程如图1-2所示。

图1-2 混合执行流程

比较图1-1和图1-2,可以看到JVM做了链接器的工作,还因为JVM也做了编译工作,所以实质上它也包含了编译器。另外,JVM还做了操作系统的部分工作,例如对资源的管理等。


[1] 称其为字节码的原因是中间语言指令集中所有的指令均使用1字节描述。