Java虚拟机发展史
- 如何查看自己的虚拟机版本?
- Sun Classic / Exact VM
- Sun HotSpot VM
- Sun Mobile-Embedded VM / Meta-Circular VM
- BEA JRockit / IBM J9 VM
- Azul VM / BEA Liquid VM
- Apache Harmony / Google Android Dalvik VM
- Microsoft JVM 及其他
1、如何查看自己的虚拟机版本?
控制台输入:java -version,即可查看。
2、Sun Classic / Exact VM
- Sun Classic:
- 世界上第一款商用 Java 虚拟机;
- 只能使用纯解释器方式来执行 Java 代码,也可以使用外挂JIT编译器,JIT 会完全接管虚拟机的执行系统,但是此时解释器不会再工作了;
- JDK1.2之前是 Sun JDK 中唯一的虚拟机,JDK1.4 时,完全退出商用虚拟机的历史舞台,与 Exact VM 一起进入了Sun Labs Research VM。
- Exact VM:
- 它的执行系统已经具备了现代高性能虚拟机的雏形:如两级即时编译器、编译器与解析器混合工作模式等;
- 使用准确式内存管理:虚拟机可以知道内存中某个位置的数据具体是什么类型。
- 有与 HotSpot 几乎一样的热点探测;
- 在商业应用上只存在了很短暂的时间就被更优秀的 HotSpot VM 所取代。
3、Sun HotSpot VM
- 它是 Sun JDK 和 OpenJDK 中所带的虚拟机,也是目前使用范围最广的 Java 虚拟机;
- 继承了 Sun 之前两款商用虚拟机的优点(如准确式内存管理),也使用了许多自己新的技术优势,如热点代码探测技术(通过执行计数器找出最具有编译价值的代码,然后通知 JIT 编译器以方法为单位进行编译);
- Oracle 公司分别收购了 BEA 和 Sun,并在 JDK8 的时候,整合了 JRokit VM 和 HotSpot VM,如使用了 JRokit 的垃圾回收器与 MissionControl 服务,使用了 HotSpot 的 JIT 编译器与混合的运行时系统。
4、Sun Mobile-Embedded VM / Meta-Circular VM
- KVM:在 Android、IOS 等智能手机操作系统出现前,曾在手机平台上得到非常广泛的应用。
- CDC / CLDC HotSpot Implementation:整个Java ME 的重要支柱,但是在 Android 和 IOS 二分天下的移动数字设备市场看来,其面临的局面不容乐观。
- Squawk VM:运行于 Sun SPOT(一种手持的WiFi设备),也曾运用于 Java Card,是一个 Java 代码比重很高的嵌入式虚拟机实现。
- JavaInJava:一个实验室性质的虚拟机,试图以 Java 语言来实现 Java 语言本身的运行环境。它必须运行在另外一个宿主虚拟机之上,内部没有 JIT 编译器,代码只能以解析模式执行。
- Maxine VM:与 JavaInJava 非常相似,它有着先进的 JIT 编译器和垃圾收集器(但没有解析器),可在宿主模式或独立模式下执行,其执行效率已经接近了 HotSpot Client VM 的水平。
5、BEA JRockit / IBM J9 VM
- JRockit VM:
- 号称“世界上速度最快的 Java 虚拟机”(广告词);
- 一款专门为服务器硬件和服务器端应用场景高度优化的虚拟机,由于专注于服务器端应用,可以不太关注程序启动速度,因此 JRockit 内部不包含解析器实现,全部代码靠即时编译器编译后执行,除此之外,JRockit 的垃圾收集器和 MissionControl 服务套件等部分的实现,在众多 Java 虚拟机中也一直处于领先水平。
- IBM J9 VM:
- 市场定位与 Sun HotSpot 比较接近,是一款设计上从服务器端到桌面应用再到嵌入式都全面考虑的多用途虚拟机;
- 其开发的目的:作为 IBM 公司各种 Java 产品的执行平台。
6、Azul VM / BEA Liquid VM
我们平时所说的“高性能 Java 虚拟机”一般是指 HotSpot、JRockit、J9 这类在通用平台上运行的商用虚拟机,但其实 Azul VM 和 BEA Liquid VM 这类特定硬件平台专有的虚拟机才是“高性能”的武器。
- Azul VM: 是在 HotSpot 基础上进行大量改进,运行于 Azul Systems 公司的专有硬件 Vega 系统上的 Java 虚拟机,每个 Azul VM 实例都可以管理至少数十个 CPU 和数百 GB 内存的硬件资源,并提供在巨大范文内实现可控的 GC 时间的垃圾收集器、为专有硬件优化的线程调度等优秀特性;
- Liquid VM:
- 即是现在的 JRockit VE(Virtual Edition),是 BEA 公司开发的,可以直接运行在自家的 Hypervisor 系统上的 Jrockit VM 的虚拟化版本。
- 它不需要操作系统的支持,或者说它自己本身实现了一个专有操作系统的必要功能,如文件系统、网络支持等。
- 由虚拟机越过通用操作系统直接控制硬件可以获得很多好处,如在线程调度时,不需要再进行核态/用户态的切换等,这样可以最大限度的发挥硬件的能力,提升 Java 程序的执行性能。
7、Apache Harmony / Google Android Dalvik VM
它们只能称为“虚拟机”,而不能称为“Java 虚拟机”。
- Apache Harmony:是一个 Apache 软件基金会旗下以 Apache License 协议开源的实际兼容于 JDK1.5 和 JDK1.6 的 Java 程序运行平台。
- Dalvik VM:
- 是 Android 平台的核心组成部分之一。
- 没有遵循 Java 虚拟机规范,不能直接执行 Java 的 Class 文件,使用的是寄存器架构而不是 JVM 中常见的栈架构。
- 它执行的 dex(Dalvik Executable)文件可以通过 Class 文件转化而来。
8、Microsoft JVM 及其他
- Microsoft JVM:微软公司为了在 IE3 中支持 Java Applets 应用而开发了自己的 Java 虚拟机,虽然这款虚拟机只有 Windows 平台的版本,却是当时 Windows 下性能最好的 Java 虚拟机。
- 其他:JamVM、cacaovm、SableVM、Kaffe、Jelatine JVM、Nano VM、MRP、Moxie JVM、Jikes RVM。