java虚拟机发展史

从1996年Sun公司发布的JDK1.0包含的Sun Classic VM开始就涌现过各种虚拟机。以下进行一些简单介绍,通过这些介绍可以了解到虚拟机的功能在朝着哪个方向进性发展。

 

Sun Classic/Exact VM:这款虚拟机的技术很原始,是世界上第一款商用的java虚拟机,只能使用纯解释的方式来执行,如果要使用JIT编译器就必须进行外挂,但是如果外挂了JIT编译器它就会完全接手虚拟机的执行系统,解释器就不工作了,由于解释器和编译器不能配合工作,意味着如果要使用编译器执行就要针对每一个方法每一行代码进行编译,无论执行的效率是否具有编译的价值。因为响应时间问题导致不能采取编译耗时的稍高优化技术。所以即使使用了JIT输出本地代码执行效率也比c++有很大差距。

         之后在平台上又发布了Exact VM,它的执行模式已经很接近现代的高性能虚拟机的雏型:如两级即时编译、编译器与解释器混合工作模式等,它使用准确式内存管理,即虚拟机可以知道内存某个位置的数据具体是什么类型,这是一个非常重要的功能因为只有这样才有能力判断堆上的数据是否可以可能被使用。(比如内存中有一个32位的整数虚拟机将有能力分辨出它到底是一个reference类型还是一个32位的整数)所以可以抛弃传统的基于handler的对象查找方式,因为在没有明确的信息表示内存中的信息哪些是数据哪些是reference的前提下,虚拟机是不能直接把值进行改变的(改变是因为在清理的过程中对象可能会被移动位置)。

 

SUN HotSpot VM:是SUN JDK和OPEN JDK中所带的虚拟机,名称中指的就是热点代码探测技术,这个能力可以通过执行计数器找出最具有编译价值的代码,然后通过JIT编译器以方法为单位进行编译,如果一个方法被频繁调用或方法中有效循环次数很多,将会分别触发标准编译和OSR栈上替换编译动作,通过编译器与解释器协同工作,可以在最优化的程序响应时间与最佳执行性能中获得平衡,减轻了即时编译的压力。

 

Sun Mobile-Embedded VM/Meta-Circular VM :Sung公司发布的其他虚拟机有:

(1)KVM:强调简单轻量高度可移植性,但是运行速度较慢,在以前的手机平台上广泛应用。

(2)CDC/CLDC HotSpot Implementation:初衷是在手机、电子书、PDA等设备上建立统一的编程接口,CDC/CLDC是它们的一组参考实现

(3)Squawk VM:是一个java代码比重很高的嵌入式虚拟机实现,诸如类加载器、字节码验证器、垃圾收集器、解释器、编译器和线程调度都是Java本身实现,只有靠c语言来编写设备的IO和必要的本地代码。

(4)JavaInJava:是一个实验性质的的虚拟机,试图以java语言来实现java语言的运行环境即元循环,所以必须在另外一个宿主虚拟机之上,内部没有编译器只有解释器

(5)Maxine VM:它是一个几乎全部以java代码实现的元循环java虚拟机,只有用于启动JVM的加载器使用C语言编写,拥有先进的JIT编译器和垃圾收集器但是没有解释器,可在独立模式或者是宿主模式下执行,已经接近了HotSpot Client VM的水平。

 

除了Sun公司其他的公司也研发过java虚拟机,其中规模最大、最著名的就是BEA和IBM了

BEA JRockit/IBM J9VM:JRockit是一个专门为服务器硬件和服务器端应用场景高度优化的虚拟机,所以不太关注程序启动速度就不包含解析器实现,全部代码都靠即时编译器编译后执行。     

        J9 VM是主力发展的虚拟机,它是由SmallTalk的虚拟机扩展而来,该虚拟机的定位与HotSpot比较接近,是一款从服务器端到桌面应用在到嵌入式都全面考虑的多用途虚拟机,J9的开发目的是作为java各种产品的执行平台。

 

Azul VM/BEA Liquid VM:其实Azul和BEA这些特定硬件平台专有的虚拟机才算是高性能。Azul是在HotSpot基础上大量改进,运行于Azul System公司的专有硬件上的java虚拟机,提供在大范围内存下可控的GC时间的垃圾收集器,为专有硬件优化的线程调度等。

        Liquid既是现在的JRockit VM的虚拟化版本,不需要操作系统的支持它自己本身就实现了一个专用操作系统的必要功能,直接越过操作系统有很多好处,比如在线程调度时不需要在进行内核态和用户态的切换等。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值