【Java】JVM - HotSpot VM

Posted by 西维蜀黍 on 2019-03-05, Last Modified on 2021-09-21

sHotSpot VM 是 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,即时编译的时间压力也相对减小,这样有助于引入更多的代码优化技术,输出质量更高的本地代码。

在 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 编译器与混合的运行时系统。


TOC