Java虚拟机发展史

一、开创世纪:Sun Classic/Exact VM

        1996年1月23日,Sun发布的JDK1.0版本首次使用了Classic VM作为Java语言的商用运行环境,当时这款虚拟机只能使用纯解释器的方式执行Java代码,如果要使用即时编译器就必须使用外挂,假如使用了外挂的即时编译器的话,即时编译器则会完全接管虚拟机的执行系统,解释器便不再工作。由于编译器和解释器不能配合工作,使得当时虚拟机的执行效率和传统的C/C++程序有很大的差别,“Java语言很慢”的印象此时便在用户心中树立起来。

        虽然如此,Classic VM仍是JDK1.2之前唯一使用的虚拟机,在JDK1.2时,它与HotSpot并存但默认使用的是Classic VM。而到了JDK1.3时,HotSpot VM便取代了Classic VM作为默认虚拟机。直到JDK1.4的时候,Classic VM才完全退出商用虚拟机的历史舞台。

        Sun公司的虚拟机团队为了努力解决Classic VM所面临的问题,在JDK1.2发布了一款名为Exact VM的虚拟机,它的编译执行系统搭载了如热点探测、两级及时编译器、编译器和解释器混合工作模式等技术,已经具备了现代高性能虚拟机的雏形。

        Exact VM虚拟机的核心是使用了一种叫准确式内存管理的技术,这项技术可以准确地知道内存中某个位置数据的数据类型,为垃圾收集判定堆上数据类型提供了前提。同时还抛弃了Classic VM基于句柄的对象查找方式,极大提高了Java代码的执行效率。

        虽然Exact VM虚拟机相对Classic VM虚拟机在性能上提升了不少,但不久还是被外部引进的HotSpot VM所取代,结束了作为Java商用虚拟机的使命。

二、武林霸主:HotSpot VM

        HotSpot虚拟机或许是我们了解最多的Java虚拟机,它是Sun/OracleJDK和OpenJDK中默认的虚拟机,也是目前使用最广泛的Java虚拟机。HotSpot虚拟机最初是由一家名为“Longview Technologies”的小公司研发的,Sun公司发现这款源于Strongtalk VM的虚拟机在即时编译等多个方面有着优秀的设计理念和成果,并在1997年收购了Longview Technologies公司,从而获得了HotSpot虚拟机。

        HotSpot虚拟机在继承了前两款商用虚拟机优点的同时,也具备了许多自己的新技术,正如名称中的HotSpot所指的就是它的热点代码探测技术,虚拟机可以通过热点代码探测技术找到最具编译价值的代码,然后通知即时编译器以方法为单位进行编译。如果一个方法被频繁调用或者有效循环次数很多,就会分别触发标准即时编译和栈上替换编译(On-Stack Replacement,OSR)行为。通过编译器与解释器协同工作,虚拟机可以在最优化的程序响应时间与最佳执行性能中取得平衡,而且无须等待本地代码输出才能执行程序,即时编译的时间压力也相对减小,这样有助于引入更复杂的代码优化技术,输出质量更高的本地代码。

        2006年,Sun公司在GPLv2协议下开放了SunJDK源码,HotSpot便成为了Sun/OracleJDK和OpenJDK两个项目的共同虚拟机。在归属于Oracle公司期间,HotSpot虚拟机又吸收了BEA JRockit的监控工具等优秀特性,并逐渐成为当前我们所熟知的HotSpot虚拟机。

三、移动端虚拟机:Mobile/Embedded VM

        众所周知,Java不仅有主打服务端的Java SE产品线,在移动端和嵌入式市场也运用广泛。Java ME作为Java在移动端的产品线,相对Java SE的发展就没那么成功。Oracle公司在Java ME这条产品线上的虚拟机名为CDC-HI(C Virtual Machine,CVM)和CLDC-HI(Monty VM),相对Java SE产品线的HotSpot虚拟机就要低调很多,但它们并不是由HotSpot直接裁剪而来,而是借鉴了一些技术,并没有直接的血缘关系。在移动市场被Android和iOS二分天下的情况下,CDC在智能手机上略微有点声音的产品是Oracle ADF Mobile,不过也只是少量的市场份额。

        而在嵌入式设备上,Java ME Embedded又和自家的Java SE Embedded(eJDK)有着直接的竞争关系,而用户能用Java SE的地方自然就不会选择用Java ME,所以市场在快速萎缩。Java SE Embedded里带的Java虚拟机当然还是HotSpot,但这是为了适应嵌入式环境专门定制裁剪的版本,尽可能在支持完整的Java SE功能的前提下向着减少内存消耗的方向优化,譬如只留下了客户端编译器(C1),去掉了服务端编译器(C2);只保留Serial/Serial Old垃圾收集器,去掉了其他收集器等。

四、“三大”其二:BEA JRockit/IBM J9 VM

        除了Sun/Oracle研发的Java虚拟机,BEA System公司的JRockit与IBM公司的IBM J9则是除了HotSpot虚拟机之外的两款主流Java虚拟机了,这三款虚拟机也曾经并称为“ 三大商业Java虚拟机”。

        JRockit虚拟机是BEA公司在2002年收购Appeal Virtual Machines公司获得的,这款虚拟机在相当一段时间内号称为“世界上速度最快的Java虚拟机”。它是专注于服务器硬件和服务端应用场景优化的虚拟机,因此不太关注程序的启动速度,内部不包含解释器。虽然如此,JRockit虚拟机的垃圾回收算法和Java Mission Control故障处理套件相比其它所有虚拟机表现更佳。Oracle在2008年收购BEA之后,一直在推进 HotSpot 与 JRockit 两款各有优势的虚拟机进行融合互补,而JRockit也永远停留在了R28版本。

        J9虚拟机作为“三大商业Java虚拟机”的另外一款,是IBM力推的一款虚拟机。与BEA JRockit只专注于服务端应用不同,IBM J9虚拟机的市场定位与HotSpot比较接近,主要应用IBM公司自己开发的各种Java产品,应用方向全面考虑服务端、桌面应用,嵌入式等,再和其他产品(如IBM WebSphere等)搭配以及在IBM AIX和z/OS这些平台上部署Java应用。

五、软硬结合:BEA Liquid VM/Azul VM

        除了HotSpot、JRockit、J9这类在通用硬件平台上运行的“高性能Java虚拟机”,还有一类运行在特殊硬件平台专有虚拟机。这类虚拟机往往与特定的硬件平台进行绑定,所以有着更高的执行效率和性能,这类专有虚拟机的代表是BEA Liquid VM和Azul VM。

        Liquid VM也就是现在的JRockit VE(Virtual Edition),它是BEA公司开发的可以直接运行在自家Hypervisor系统上的JRockit虚拟机的虚拟化版本。Liquid VM自己本身实现了一个专用操作系统的必要功能,如线程调度、文件系统、网络支持等,这种虚拟机越过操作系统直接调用硬件的方式可以最大发挥底层硬件的能力,极大地提高了Java代码执行性能。

        Azul VM是运行于Azul Systems公司的专有硬件Vega系统上的Java专用虚拟机,在HotSpot基础上改动而来。每个Azul VM实例都可以管理至少数十个CPU和数百GB的内存的硬件资源,并提供在巨大内存范围内停顿时间可控的垃圾收集器(即业内赫赫有名的PGC和C4收集器),为专有硬件优化的线程调度等优秀特性。然而随着虚拟机技术的不断发展,商业上的缺陷是的专用虚拟机逐渐落寞,最终Azul System公司也放弃Vega产品线,把全部精力投入到Zing和Zulu产品线中。

        Zing虚拟机是Azul System公司在Sun还未被收购之前,从HotSpot某旧版代码分支基础上独立出来重新开发而来。经过多年的内部自研,Azul公司为它编写了新的垃圾回收器,支持几TB量级的堆空间管理,同时也配套了ZVision/ZVRobot这类的性能监控工具,可以方便用户监控JVM的运行状态,比如锁状态竞争、对象分配过程、热点代码探测等细节。总的来说,Zing拥有高吞吐低延迟、快速预热、易于监控的诸多优点,这些也是Zing的核心价值和卖点。

引用:

        1、《深入理解Java虚拟机系统:JVM高级特性与最佳实践》—周志明 著;

        

        

        

        

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值