Java虚拟机(Java virtual Machine)简称JVM,是一个庞大的体系,不同的厂家否有自己的实现方案,这里简单介绍常见的不同厂商的JVM实现。

    • JDK 1.0,1996年引入Sun Classic VM,虚拟机鼻祖,世界上第一款商用Java虚拟机。
    • JDK 1.2,Solaris平台发布Exact VM,已经初具现代高性能虚拟机雏形,出现热点探测、即时编译等。但是生命周期短暂,这一时期并存Sun Classic VM、Exact VM、HotSpot VM,可通过命令切换。
    • JDK 1.3,HotSpot VM成为默认选择,Exact VM依然为备用选择。
    • JDK 1.4,Classic VM才完全退出商用虚拟机的历史舞台,与Exact VM一起进入了Sun Labs Research VM之中。HotSpot继承了Sun公司两款虚拟机的优点,自此之后HotSpot VM也一直成为OracleJDK和OpenJDK中默认的虚拟机。得益于Sun和Oracle两大巨头在不同时期的影响力,HotSpot也成为了使用最为广泛的虚拟机。
    • Mobile/Embedded VM,这是一款面向JavaME产品线的虚拟机。主打移动端和嵌入式设备市场。只留下了客户端编译器(C1),去掉了服务端编译器(C2);只保留Serial/Serial Old垃圾收集器,去掉了其他收集器等,是一款小家碧玉型产品。
    • BEA JRockit,号称最快的虚拟机,天下武功唯快不破,当然也有可能每一家都这么宣传,后来BEA公司也被Oracle收购,由于其设计架构与HotSpot大相径庭,因此只有少部分监控相关的优势被吸纳进去,天下武功,九九归一。
    • IBM J9,内部名称曾定义为IT4J(IBM Technology for Java Virtual Machine),太长的名字,因此也看出名字的重要性,至今仍然活跃,与之对应的是可以更好的兼容在IBM的小型机运行平台,模块化也是其显著的优势和特点,因此可以按需启用,消耗较小的资源,提供更大的优势。
    • BEA LiquidVM/Azul VM 相比于大名鼎鼎的HotSpot、JRockit、J9等通用型的多平台兼容的JVM,还有一种与特定平台,硬件绑定的专有化虚拟机,BEA的Liquid VM不需要依托于其他操作系统,本身就已经系统化,直接运行在自家Hypervisor系统上。Azul VM是Azul Systems公司在HotSpot基础上进行大量改进,运行于自家专有硬件Vega上的虚拟机,可以管理大量的CPU和内存,使用的是有名的PGC和C4收集器。随着业务线的调整,2010年,Azul转型软件业务,把全部精力投入到Zing(以软件的方式达到接近Vega系统的虚拟机)的研发中,而HotSpot在JDK 11和JDK 12中的ZGC和Shenandoah也才达到同等目标,JVM的发展竞争也渐激烈。

    除了上面提到的使用广泛或者名气比较大的商用虚拟机外,也存在一些对整个Java虚拟机产生深渊影响的产品。

    • Apache Harmony,Harmony中的DRLVM,这是一个兼容JDK 5和JDK 6的平台,可以运行Eclipse、Tomcat、Maven等程序,一直没有获取TCK授权,在Oracle收购Sun之后,Apache一度退出JCP组织,这也是Java社区历史上最为割裂的一件事。直到OpenJDK的诞生,Harmony的优势被极大的抵消,项目的最大参与者IBM也宣布退出,虽然Harmony从诞生起就没有大规模商用,但是Harmony的代码被吸收进IBM的JDK 7和Google Android SDK,这也对Android的发展产生了深远影响,似乎某种程度圆了Java诞生之初Sun就设定的路线,主打移动端的嵌入式设备路线。
    • Microsoft JVM,可曾想到微软当初也设计过自己的Java虚拟机,但被Sun以侵权告退,并且终止了Java虚拟机的研发,也许正因如此才诞生了.NET平台,能让你强大的永远是你的对手,微软也在一次证明了自己的强大。

    Java虚拟机的发展也进入到一种百花齐放,百家争鸣的局面,除了大规模的服务器级别的虚拟机外,也存在一些小型的虚拟机平台。

    • KVM,Android、IOS等智能手机操作系统出现前广泛使用的手机平台。
    • JCVM,Java虚拟机的一个子集,如智能卡,SIM卡,信用卡等,通常用作加密模块。
    • Squawk VM,由Sun开发曾用于Java Card的嵌入式虚拟机实现。
    • JavaInJava,Sun公司开发的一个实验性质的虚拟机,通过元循环证明一门语言可以自举,通过Java来实现Java语言的运行环境,没有编译器,通过解释模式来运行。
    • Maxine VM,一个类似于JavaInJava的产品,效率跟高,接近于HotSpot。
    • Jikes RVM,由IBM研发的一个实验性质的项目,类似于JavaInJava。
    • IKVM.NET,基于.NET平台实现的Java虚拟机,通过Mono实现了一定的跨平台能力。

    Java经过了这么多年的发展,经历过公司更替,经历过组织割裂,沧海桑田,都使其走了过来,在互联网快速发展的今天,这是一个最好的时代,也是一个最坏的时代,挑战与机遇并存,Oracle公司推出的Graal VM也被官方称为Universal VM,这也是未来最有可能替代HotSpot VM的产品,也将承担起Java迎接更大的挑战。

    附录:Oracle Java 虚拟机规范官方文档