【三】Java VM 发展史
1. Sun Classic VM
jdk1.0 第一款商用虚拟机。
只能使用纯解释器来运行Java代码。没有自己的判断,会把每一个方法每一行代码都编译,效率不好。导致大家普遍认为Java代码运行效率比较慢。
使用jit编译器的话 需要外挂完全接管虚拟机的执行系统,解释器不再工作。 (Why use jit ?)
2. Exact VM
jdk1.2 只在Solaris上发布了
Exact Memory Management 准确式子内存管理
即:虚拟机可以知道内存中某个位置的数据具体是什么类型的。
eg:一个整数类型数据,到底是引用类型的数值地址呢?还是直接存了这个数值的整数?知道这个之后,进行垃圾回收的时候,就可以判断堆上的数据是否还能被使用
可以抛弃classic VM 基于handler的查找方式,那么虚拟机的性能较classic VM有一个很大的提高。有了高性能虚拟机的雏形。编译器和解释器混合工作以及两
级即时编译器。
英雄气短,还没来得及在windows和linux上发布,就被Hot Spot取代了。jdk1.2 在windows 和linux 上依然是classicVM
3.Hot Spot VM
参考:《深入理解Java虚拟机:JVM高级特性与最佳实践(第2版)》
http://book.2cto.com/201306/25426.html
提起HotSpot VM,相信所有Java程序员都知道,它是Sun JDK和OpenJDK中所带的虚拟机,也是目前使用范围最广的Java虚拟机。
但不一定所有人都知道的是,这个目前看起来“血统纯正”的虚拟机在最初并非由Sun公司开发,而是由一家名为“Longview Technologies”的小公司设计的;
甚至这个虚拟机最初并非是为Java语言而开发的,它来源于Strongtalk VM,
而这款虚拟机中相当多的技术又是来源于一款支持Self语言实现“达到C语言50%以上的执行效率”的目标而设计的虚拟机,
Sun公司注意到了这款虚拟机在JIT编译上有许多优秀的理念和实际效果,在1997年收购了Longview Technologies公司,从而获得了HotSpot VM。
HotSpot VM既继承了Sun之前两款商用虚拟机的优点(如前面提到的准确式内存管理),也有许多自己新的技术优势,
如它名称中的HotSpot指的就是它的热点代码探测技术(其实两个VM基本上是同时期的独立产品,HotSpot还稍早一些,HotSpot一开始就是准确式GC,
而Exact VM之中也有与HotSpot几乎一样的热点探测。
为了Exact VM和HotSpot VM哪个成为Sun主要支持的VM产品,在Sun公司内部还有过争论,HotSpot打败Exact并不能算技术上的胜利),
HotSpot VM的热点代码探测能力可以通过执行计数器找出最具有编译价值的代码,然后通知JIT编译器以方法为单位进行编译。
如果一个方法被频繁调用,或方法中有效循环次数很多,将会分别触发标准编译和OSR(栈上替换)编译动作。
通过编译器与解释器恰当地协同工作,可以在最优化的程序响应时间与最佳执行性能中取得平衡,而且无须等待本地代码输出才能执行程序,
即时编译的时间压力也相对减小,这样有助于引入更多的代码优化技术,输出质量更高的本地代码。
在2006年的JavaOne大会上,Sun公司宣布最终会把Java开源,并在随后的一年,陆续将JDK的各个部分(其中当然也包括了HotSpot VM)在GPL协议下公开了源码,
并在此基础上建立了OpenJDK。这样,HotSpot VM便成为了Sun JDK和OpenJDK两个实现极度接近的JDK项目的共同虚拟机。
在2008年和2009年,Oracle公司分别收购了BEA公司和Sun公司,这样Oracle就同时拥有了两款优秀的Java虚拟机:JRockit VM和HotSpot VM。
Oracle公司宣布在不久的将来(大约应在发布JDK 8的时候)会完成这两款虚拟机的整合工作,使之优势互补。
整合的方式大致上是在HotSpot的基础上,移植JRockit的优秀特性,譬如使用JRockit的垃圾回收器与MissionControl服务,
使用HotSpot的JIT编译器与混合的运行时系统。
4.KVM
- kilobyte 简单、轻量、高度可移植、运行速度慢,是一款嵌入式虚拟机。 (j2ME使用)
- 在手机平台运行
5、JRockit
- BEA 公司研发 (BEA公司 2008年被Oracle收购)
- 世界上最快的虚拟机
- 专注服务器端的应用(不太关心程序的启动速度,内部不包含解释器的实现,全部代码都靠即时编译器编译后执行,所以性能高)
- 优势:
- 垃圾收集器
- Mission Controle服务套件(用来诊断内存泄露并指出根本原因)
- Mission Controle服务套件(用来诊断内存泄露并指出根本原因)
6、J9
IBM Technology for java virtual Machine (IT4j)
与Hot Spot 类似,从服务器端,到桌面应用,再到嵌入式,全部都考虑了,
7、Dalvik (安卓)
是冰岛的一个小渔村的名字。
并不是一个Java虚拟机,因为并不遵循Java虚拟机的规范,是不能直接执行编译后的.class文件。
使用的是寄存器架构,而不是Java VM 所使用的栈架构。它执行的是 .dex(dalvik Execuable)文件。
8、Microsoft JVM
只能运行在windows 平台上,当时是windows上运行效率最快的。
97 Sun 以此告微软,微软败诉,赔偿大概10亿美元作用。并停止开发和使用此虚拟机,就此夭折。所以现在windows 系统上并没有自带的虚拟机,都需要自己安装并配置环境变量。
9、Azul VM
是Azul system 公司 在Hot Spot基础上进行的改进,是运行在其公司专有的硬件上,一个Azul VM 实例,都可以管理数十个CPU以及数百G的内存资源,而且通过巨大内存范围内,实现可控的GC事件以及垃圾回收。
10、 Liquid VM
BEA 公司的一个产品。更加强大,不需要操作系统的支持,它自己就是一个操作系统。说Java慢,是因为它先经过一层Java VM,然后虚拟机来调用OS,多了一部。而Liquid VM本身就不需要OS的支持,它自己就已经实现了File System,网络支持等等这些必要的功能,本身就相当与一个OS。所以性能和速度都是相当强大的。
11、TaobaoVM
淘宝公司根据HotSpot 深度定制的产品。对硬件依赖比较高,eg : 只能使用Intel的CPU,损失了兼容性,但是提高了性能。在JNI(Java Native Interface)调用时,能够降低进程的开销。