1.4 Java虚拟机家族 1.4 Java虚拟机家族 1.4.8 百家争鸣
1.4.8 百家争鸣
还有一些Java虚拟机天生就注定不会应用在主流领域,或者不是单纯为了用于生产,甚至在设计 之初就没有抱着商用的目的,仅仅是用于研究、验证某种技术和观点,又或者是作为一些规范的标准 实现。这些虚拟机对于大多数不从事相关领域开发的Java程序员来说可能比较陌生,笔者列举几款较 为有影响的:
- KVM[^1]
- KVM中的K是“Kilobyte”的意思,它强调简单、轻量、高度可移植,但是运行速度比较慢。在 Android、iOS等智能手机操作系统出现前曾经在手机平台上得到非常广泛应用。
- Java Card VM
- JCVM是Java虚拟机很小的一个子集,裁减了许多模块但通常支持绝大多数的常用加密算法。 JCVM必须精简到能放入智能卡、SIM卡、银行信用卡、借记卡内,负责对Java Applet程序进行解释执 行。
- Squawk VM
- Squawk VM是由Sun开发,运行于Sun SPOT(Sun Small Programmable Object Tech-nology,一种手 持的Wi-Fi设备),也曾经运用于Java Card。这是一个Java代码比重很高的嵌入式虚拟机实现,其中诸 如类加载器、字节码验证器、垃圾收集器、解释器、编译器和线程调度都是用Java语言完成的,仅仅 靠C语言来编写设备I/O和必要的本地代码。
- JavaInJava
- JavaInJava是Sun公司在1997年~1998年间所研发的一个实验室性质的虚拟机,从名字就可以看 出,它试图以Java语言来实现Java语言本身的运行环境,既所谓的“元循环”(Meta-Circular,是指使用 语言自身来实现其运行环境)虚拟机。它必须运行在另外一个宿主虚拟机之上,内部没有即时编译 器,代码只能以解释模式执行。在上世纪末主流原生的Java虚拟机都未能很好解决性能问题的时代, 开发这种项目,其执行速度大家可想而知,不过通过元循环证明一门语言可以自举,是具有它的研究 价值的。
- Maxine VM
- Maxine VM和上面的JavaInJava非常相似,它也是一个几乎全部以Java代码实现(只有用于启动 Java虚拟机的加载器使用C语言编写)的元循环Java虚拟机。这个项目于2005年开始,到现在仍然在发 展之中,比起JavaInJava,Maxine VM的执行效率就显得靠谱得多,它有先进的即时编译器和垃圾收集 器,可在宿主模式或独立模式下执行,其执行效率已经接近HotSpot虚拟机Client模式的水平。后来有 了从C1X编译器演进而来的Graal编译器的支持,就更加如虎添翼,执行效率有了进一步飞跃。Graal编 译器现在已经是HotSpot的默认组件,是未来代替HotSpot中服务端编译器的希望。
- Jikes RVM
- Jikes RVM是IBM开发的专门用来研究Java虚拟机实现技术的项目。曾用名为Jalapeño。与 JavaInJava和Maxine一样,它也是一个元循环虚拟机。
- IKVM.NET
- 这是一个基于微软.NET框架实现的Java虚拟机,并借助Mono获得一定的跨平台能力。IKVM.NET 的目标第一眼看起来的确很奇怪,可能在某些特殊情况下,在.NET上使用某些流行的Java库也许真的 不算是伪需求?IKVM.NET可以将Class文件编译成.NET Assembly,在任意的CLI上运行。
其他在本文中没有介绍到的Java虚拟机还有许多,笔者将自己所知的列举如下:
- JamVM:http://jamvm.sourceforge.net/
- CacaoVM:http://www.cacaovm.org/
- SableVM:http://www.sablevm.org/
- Kaffe:http://www.kaffe.org/
- Jelatine JVM:http://jelatine.sourceforge.net/
- NanoVM:http://www.harbaum.org/till/nanovm/index.shtml
- MRP:https://github.com/codehaus/mrp
- Moxie JVM:http://moxie.sourceforge.net/
[^1]: 这里把Java ME里面的虚拟机列为“少数派”是从大多数Java程序员的了解程度出发的,从虚拟机部 署数量来讲,Java ME远比Java SE、Java EE的虚拟机多,毕竟服务器应用是无法在数量上和移动、嵌 入式设备比较的。