11.深入理解java虚拟机--第三部分程序编译与代码优化----晚期运行期优化
11.1 概述 在部分的商用虚拟机(Sun HotSpot、IBM J9)中,Java程序最初是通过解释器(Interpreter)进行解释执行的, 当虚拟机发现某个方法或代码块的运行特别频繁时,就会把这些代码认定为“热点代码”(Hot Spot Code)。为了提高热点代码的执行效率,在运行时,虚拟机将会把这些代码编译成与本地平台相关的机器码,并进行各种层次的优化,完成这个任务的编译器称为即时编译器(Just In Time Compiler,下文中简称JIT编译器 )。即时编译器并不是虚拟机必需的部分,Java虚拟机规范并没有规定Java虚拟机内必须要有即时编译器存在,更没有限定或指导即时编译器应该如何去实现。但是, 即时编译器编译性能的好坏、代码优化程度的高低却是衡量一款商用虚拟机优秀与否的最关键的指标之一,它也是虚拟机中最核心且最能体现虚拟机技术水平的部分 。\ 11.2 HotSpot虚拟机内的即时编译器 在本节中,我们将要了解HotSpot虚拟机内的即时编译器的运作过程,同时,还要解决以下几个问题:[插图]为何HotSpot虚拟机要使用解释器与编译器并存的架构?[插图]为何HotSpot虚拟机要实现两个不同的即时编译器?[插图]程序何时使用解释器执行?何时使用编译器执行?[插图]哪些程序代码会被编译为本地代码?如何编译为本地代码?[插图