- 由于跨平台设计,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的软件生态没有丝毫变化。