1、运行期
虚拟机会把“热点代码”编译成与本地平台相关的机器码,并进行各种层次的优化,完成这个任务的编译器称为即时编译器(Just In Time Compiler,JIT)。
所谓“热点代码”,是指:(1)被多次调用的方法;(2)被多次执行的循环体(依然会以整个方法为编译对象)。
由于HotSpot虚拟机使用基于计数器的热点探测方法,存在热度衰减(Counter Decay)和半衰周期。只要系统运行时间足够长,绝大部分方法都会被编译成本地代码。
2、解释器与编译器
HotSpot虚拟机同时包含解释器和编译器。事实上,HotSpot内置了两个即时编译器:Client Compiler和Server Compiler。后者几乎能达到GNU C++编译器使用-O2参数时人优化强度。
3、常用的优化手段
(1)语言无关的经典优化技术之一:公共子表达式消除;
(2)语言相关的经典优化技术之一:数组范围检查消除;
(3)最重要的优化技术之一:方法内联;
(4)最前沿的优化技术之一:逃逸分析。
当一个对象在方法里面被定义后,它可能被外部方法所引用。例如作为调用参数传递到其他方法中,这种行为称为方法逃逸;甚至还有可能被外部线程访问到,譬如赋值给类变量或可以在其他线程中访问的实例变量,这种行为称为线程逃逸。(P310)