剑指JVM:虚拟机实践与性能调优
上QQ阅读APP看书,第一时间看更新

1.10.3 HotSpot VM

相信很多Java程序员都听说过HotSpot虚拟机,它是Sun/Oracle JDK和Open JDK中的默认虚拟机,也是目前使用范围最广的JVM。然而HotSpot虚拟机最初由一家名为Longview Technologies的小公司设计,这款虚拟机在即时编译等方面有着优秀的理念和实际成果,Sun公司在1997年收购了Longview Technologies公司,从而获得了HotSpot虚拟机。2009年,Sun公司被Oracle公司收购,在JDK 1.3中HotSpot VM成为默认虚拟机。

HotSpot VM继承了Sun之前两款商用虚拟机的优点,也有许多自己新的技术优势,比如它的热点代码探测技术。程序执行过程中,一个被多次调用的方法,或者一个方法体内部循环次数较多的循环体都可以被称为“热点代码”,探测到热点代码后,通知即时编译器以方法为单位触发标准即时编译和栈上替换编译(On-Stack Replacement,OSR)。此外,HotSpot VM是编译器与解释器同时存在的,当程序启动后,解释器可以马上发挥作用,省去编译的时间,立即执行。编译器把代码编译成机器码,需要一定的执行时间,但编译为机器码后,执行效率高。通过编译器与解释器恰当地协同工作,可以在最优的程序响应时间与最佳的执行性能中取得平衡,而且无须等待本地代码输出再执行程序,即时编译的时间压力也相对减小。不管是仍在广泛使用的JDK 6,还是使用比例较高的JDK 8中,默认的虚拟机都是HotSpot。

因此本书中默认介绍的虚拟机都是HotSpot,相关GC机制也主要是指HotSpot的GC机制。对于HotSpot虚拟机从服务器、桌面到移动端、嵌入式都有应用。得益于Sun/Oracle JDK在Java应用中的统治地位,HotSpot理所当然地成为全世界使用最广泛的JVM,是虚拟机家族中毫无争议的“武林盟主”。