• 由于跨平台设计,java指令都是根据栈来设计
  • 不同平台cpu架构不同,所以不能基于寄存器

:跨平台性、指令集小、指令多;执行性能比寄存器差

常用虚拟机

Classic VM

  • SUN公司虚拟机
  • 世界上第一款商用java虚拟机

jit:即时编译器

Exact VM

HotSpot VM

  • sun公司的
  • jdk1.3时 成为java默认虚拟机

JRockit VM

  • BEA的 *bea已被oracle收购
  • 专注于服务器端应用
  • 内部不包含解析器实现,全部代码都靠即时编译器编译后执行。
  • 世界上最快的JVM。

Missioncontrol服务套件,它是一组以极低的开销来监控、管理和分析生产

J9

  • IBM的
  • 有影响力的三大商用虚拟机之一。
  • 号称世界上最快的java虚拟机 。 通用性上比不上jrockit

性能较高

Azul VM

  • Azul VM和BEA Liquid VM是与特定硬件平台绑定、软硬件配合的专有虚拟机
  • 每个Azul VM实例都可以管理至少数十个cPu和数百GB内存的硬件资源,并提供在巨大内存范围内实现可控的cc时间的垃圾收集器、专有硬件优化的线程调度等优秀特性。

Liquid VM

  • 高性能Java虚拟机中的战斗机。
  • BEA公司开发的,直接运行在自家Hypervisor系统上
  • Liquid VM即是现在的JRockit VE (Virtual Edition) ,LiquidVM不需要操作系统的支持,或者说它自己本身实现了一个专用操作系统的必要功能,如线程调度、文件系统、网络支持等。
  • 随着JRockit虚拟机终止开发,Liquid VM项目也停止了。

其他

KVM CLDC-HL早期产品 简单、轻量、高度可移植

CDC/CLDC

Harmony

  • apache的

Microsoft JVM

  • 微软的

TaobaoJVM

  • 阿里的
  • taobao vm应用在阿里产品上性能高,硬件严重依赖intel的cpu,损失了兼容性,但提高了性能

Dalvik VM

  • Dalvik VM只能称作虚拟机,而不能称作“Java 虚拟机”,它没有遵循Java虚拟机规范
  • 不能直接执行Java的class 文件基于寄存器架构,不是jvm的栈架构。执行的是编译以后的dex (Dalvik Executable)文件。执行效率比较高。它执行的dex (Dalvik Executable)文件可以通过class文件转化而来,
  • 使用Java语法编写应用程序,可以直接使用大部分的Java API等。
  • Android 5.0使用支持提前编译(Ahead of Time Compilation,AoT)的ART VM替换Dalvik VM。

Graal VM

  • Graal VM在HotSpot VM基础上增强而成的跨语言全栈虚拟机,可以作为“任何语言”的运行平台使用。语言包括: Java、scala、Groovy、Kotlin;c、C++、Javascript、Ruby、Python、R等
  • 如果说HotSpot有一天真的被取代,Graal VM希望最大。但是Java的软件生态没有丝毫变化。