参考 http://book.2cto.com/201306/25434.htmlhtml
另外,这篇文章也是从一个系列中得出的: 《深刻理解Java虚拟机:JVM高级特性与最佳实践(第2版)》 http://book.2cto.com/201306/25426.html 已经下载了这本书(60多M。。) /Users/baidu/Documents/Data/Interview/Java
HotSpot程序员
提起HotSpot VM,相信全部Java程序员都知道,它是Sun JDK和OpenJDK中所带的虚拟机,也是目前使用范围最广的Java虚拟机。
但不必定全部人都知道的是,这个目前看起来“血统纯正”的虚拟机在最初并不是由Sun公司开发,而是由一家名为“Longview Technologies”的小公司设计的;
甚至这个虚拟机最初并不是是为Java语言而开发的,它来源于Strongtalk VM,
而这款虚拟机中至关多的技术又是来源于一款支持Self语言实现“达到C语言50%以上的执行效率”的目标而设计的虚拟机,Sun公司注意到了这款虚拟机在JIT编译上有许多优秀的理念和实际效果,在1997年收购了Longview Technologies公司,从而得到了HotSpot VM。 HotSpot VM既继承了Sun以前两款商用虚拟机的优势(如前面提到的准确式内存管理),也有许多本身新的技术优点,如它名称中的HotSpot指的就是它的热点代码探测技术(其实两个VM基本上是同时期的独立产品,HotSpot还稍早一些,HotSpot一开始就是准确式GC,而Exact VM之中也有与HotSpot几乎同样的热点探测。为了Exact VM和HotSpot VM哪一个成为Sun主要支持的VM产品,在Sun公司内部还有过争论,HotSpot战胜Exact并不能算技术上的胜利),HotSpot VM的热点代码探测能力能够经过执行计数器找出最具备编译价值的代码,而后通知JIT编译器以方法为单位进行编译。若是一个方法被频繁调用,或方法中有效循环次数不少,将会分别触发标准编译和OSR(栈上替换)编译动做。经过编译器与解释器恰当地协同工做,能够在最优化的程序响应时间与最佳执行性能中取得平衡,并且无须等待本地代码输出才能执行程序,即时编译的时间压力也相对减少,这样有助于引入更多的代码优化技术,输出质量更高的本地代码。 在2006年的JavaOne大会上,Sun公司宣布最终会把Java开源,并在随后的一年,陆续将JDK的各个部分(其中固然也包括了HotSpot VM)在GPL协议下公开了源码,并在此基础上创建了OpenJDK。这样,HotSpot VM便成为了Sun JDK和OpenJDK两个实现极度接近的JDK项目的共同虚拟机。 在2008年和2009年,Oracle公司分别收购了BEA公司和Sun公司,这样Oracle就同时拥有了两款优秀的Java虚拟机:JRockit VM和HotSpot VM。Oracle公司宣布在不久的未来(大约应在发布JDK 8的时候)会完成这两款虚拟机的整合工做,使之优点互补。整合的方式大体上是在HotSpot的基础上,移植JRockit的优秀特性,譬如使用JRockit的垃圾回收器与MissionControl服务,使用HotSpot的JIT编译器与混合的运行时系统。