在所有的JDK安装教程里,我们最后总是这样来校验是否安装成功。不知道你是否有静下心来看所有完整的内容,或者只看到了版本号,这里我们一起在看一遍吧。
java -version
这里包含了Java的版本号以及虚拟机的名称HotSpot。HotSpot虚拟机是Sun JDK和OpenJDK中所带的虚拟机,也是目前使用范围最广的Java虚拟机。那么,虚拟机的发展史是什么呢?除了HotSpot还有哪些JVM呢,它们各自用于哪些领域?让我们一起走进JVM的前世今生。
第一款商用JVM Sun Classic VM
以今天的视角来看,Sun Classic VM的技术可能很原始,这款虚拟机的使命也早已终结。但仅凭它“世界上第一款商用Java虚拟机”的头衔,就足够有让历史记住它的理由。
1996年1月23日,Sun公司发布JDK 1.0,Java语言首次拥有了商用的正式运行环境,这个JDK中所带的虚拟机就是Classic VM。这款虚拟机只能使用纯解释器方式来执行Java代码,如果要使用JIT编译器,就必须进行外挂。但是假如外挂了JIT编译器,JIT编译器就完全接管了虚拟机的执行系统,解释器便不再工作了。用户在这款虚拟机上执行java -version命令,将会看到类似下面这行输出:其中的“sunwjit”就是Sun提供的外挂编译器,其他类似的外挂编译器还有Symantec JIT和shuJIT等。由于解释器和编译器不能配合工作,这就意味着如果要使用编译器执行,编译器就不得不对每一个方法、每一行代码都进行编译,而无论它们执行的频率是否具有编译的价值。基于程序响应时间的压力,这些编译器根本不敢应用编译耗时稍高的优化技术,因此这个阶段的虚拟机即使用了JIT编译器输出本地代码,执行效率也和传统的C/C++程序有很大差距,“Java语言很慢”的形象就是在这时候开始在用户心中树立起来的。
最火的JVM Sun HotSpot VM
提起HotSpot VM,相信所有Java程序员都知道,它是Sun JDK和OpenJDK中所带的虚拟机,也是目前使用范围最广的Java虚拟机。但不一定所有人都知道的是,这个目前看起来“血统纯正”的虚拟机在最初并非由Sun公司开发,而是由一家名为“Longview Technologies”的小公司设计的;甚至这个虚拟机最初并非是为Java语言而开发的,它来源于Strongtalk VM,而这款虚拟机中相当多的技术又是来源于一款支持Self语言实现“达到C语言50%以上的执行效率”的目标而设计的虚拟机,Sun公司注意到了这款虚拟机在JIT编译上有许多优秀的理念和实际效果,在1997年收购了Longview Technologies公司,从而获得了HotSpot VM。在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编译器与混合的运行时系统。
sun/oracle 公司研发的其他JVM
- Exact VM
sun公司JDK1.2时出生,生存期很短,因为后面的HotSpot非常成功 - KVM
一款用于手机操作系统的JVM - CDC/CLDC HotSpot Implementation
用于移动端操作系统的JVM - Squawk VM
sun公司研发,运行于Sun SPOT(一种手持WIFI设备) - JavaInJava
sun公司早期实验性的虚拟机,运行速度极慢 - Maxine VM
好多年前说开发之中,执行效率接近HotSpot VM,现在不知道怎么样了
非sun/oracle公司研发的JVM
- JRockit VM
号称全世界最快的Java虚拟机,是BEA公司从Appeal Virtual Machines公司收购,内部不包含解析器实现,全部代码都靠编译器编译后执行,垃圾收集器和Mission Control服务套件处于领先的地位 - J9 VM
IBM主力发展的虚拟机,主要是配合IBM的产品使用,最开始是IBM的工程师为了解决HotSpotVM中的一个BUG诞生 - Azul VM
Azul Systems公司在HotSpot基础上进行了大量的改进,运行于Azul Systems公司专有硬件Vega系统上的虚拟机 - Liquid VM
JRockit VM的改进 - and so on...........................
本章节的意义
上面很多内容都摘出来的,可能也比较乏味。一般我看书的时候这一章节是绝对跳过的,但是为了本章,我还是看了一遍。之所以一定要有本章节,旨在说明JVM其实也是有一个发展的过程以及不同的实现,所以我们接下来的章节主要是针对于常见的HotSpot JVM来进行研究。
Stay hungry,stay foolish.
网友评论