JVM 篇:虚拟机种类

通用平台的虚拟机

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 位的虚拟机还有一段路要走

你可能感兴趣的:(JVM)