通用平台的虚拟机
Classic VM
- JDK1 与 JDK2 的官方默认虚拟机,世界第一种 java 虚拟机
- 通过纯解释器执行 Java 代码,即时编译器只能通过外挂的形式存在,并且不能与解释器一起运行。(那个时候的 Java 很慢)
Exact VM
- Sun 公司为了解决 Classic VM 的效率问题而计划研发的,但只在 Solaris 系统上发布过,后来就被 HotSpot 取代了
- 因其使用准确式内存管理而闻名。(知道内存中某一块区域存放的是哪一种数据结构,有利于垃圾收集)
HotSpot
- JDK3 之后的官方默认虚拟机
- 同样有准确式内存管理
- 因其热点探测技术而闻名。(知道哪一段代码经常执行,将其编译成机器代码,提高运行效率)
JRockit
- BEA 公司研发的,对服务端高度优化的虚拟机
- 其垃圾收集机制和 MissionControl 服务套件,一直处于 Java 虚拟机的领先水平
- Oracle 在 2008 年收购 BEA 公司,在 2009 年收购 Sun 公司。Oracle 计划从 JDK8 开始将两种虚拟机融合成一种。(JDK8 的 HotSpot 已经放弃用永久代来实现方法区,转而使用元空间)
J9
- IBM 公司研发,主要为了在自家研发的产品上跑 Java 程序
其他虚拟机
Dalvik VM
- Google 为 Android 开发而研发的虚拟机,不是 java 虚拟机,但关系很密切
- Dalvik VM 基于寄存器运行,而 JVM 基于栈
- Dalvik 通过将 class 文件转化为 dex 文件来运行
Microsoft JVM
- 微软曾经在其操作系统上开发了一款 win 专用的 JVM (Win 平台下最快的虚拟机),后和 Sun 打官司输掉,该项目停止。
Apache Harmony
- Apache 开发的 JDK,但一直没有得到 Sun 公司的授权,Apache 因此退出了 JCP
- 后 Sun 公司开源了 OpenJDK,Apache Harmony 项目就变得不太热门
64 位虚拟机
- 因为指针膨胀和数据对齐补白等缘故,64 位虚拟机比 32 位虚拟机所需要消耗的内存更大 (约多 10% - 30% 的开销,性能相差 15%)
- 现在大多数商用系统都是通过虚拟集群的方式来支持大于 4G 的内存。
- 64 位的虚拟机还有一段路要走