天天看点

JVM的"发家"史

当前java虚拟机中最出名的应该就是HotSpot VM了,它是Sun JDK和OpenJDK中所带的虚拟机,也是目前使用范围最广的java虚拟机。HotSpot VM具有热点代码探测能力,可以通过执行计数器找出程序中最具编译价值的代码,然后通过JIT编译器以方法为单位进行编译,如果一个方法被频繁调用,或方法中有效循环次数很多,将分别触发标准编译和OSR(栈上替换)编译动作。通过与解释器恰当地协同工作,以减少编译时间压力跟平衡性能。

JVM的"发家"史

除此之外,JRockit VM,BEA公司的虚拟机,一款专门为服务器硬件和服务器端应用场景高度优化的虚拟机,。由于专注于服务器端应用,它可以不太关注程序启动速度,因此 JRckit不太关注程序的启动速度,因此JRockit内部不包含解析器实现,全部代码都靠即时编译器编译后执行,JRockit的垃圾收集器和MisssionControl服务套件等部分的实现,在众多java虚拟机中也一直处于领先水平。

JVM的"发家"史

IBM J9 VM,市场定位与Sun的HotSpot比较接近,是一款设计上从服务器端到桌面应用再到嵌入式都全面考虑的多用途虚拟机。

ART:(Android runtime)安卓4.4以后的虚拟机。ART 的机制与 Dalvik 不同。在Dalvik下,应用每次运行的时候,字节码都需要通过即时编译

器转换为机器码,这会拖慢应用的运行效率,而在ART 环境中,应用在第一次安装的时候,字节码就会预先编译成机器码

,使其成为真正的本地应用。这个过程叫做预编译(AOT,Ahead-Of-Time)。这样的话,应用的启动(首次)和执行都会变得更加快速。

除了上述三款流行的VM外,还有两款虚拟机对虚拟机发展产生重要影响:

Apache Harmony是Apache软件基金会旗下以Apache License协议开源的实际兼容于JDK1.5和JDK1.6的java程序运行平台。因为Sun公司的原因,没有通过TCK(Technology Compatibility Kit)测试,该项目期望支持尽可能多的不同平台,于2011年停止开发。目前,Dalvik虚拟机, Google Android平台所使用的虚拟机,使用了Harmony部份的子集,作为它核心的类库。

JVM的"发家"史

Dalvik VM :目前安卓平台的一款虚拟机,没有遵循java虚拟机规范,不能直接执行java的Class文件,使用的是寄存器架构而不是JVM中常见架构。(一般来说,基于堆栈的机器必须使用指令才能从堆栈上的加载和操作数据,因此,相对基于寄存器的机器,它们需要更多的指令才能实现相同的性能。但是基于寄存器机器上的指令必须经过编码,因此,它们的指令往往更大。这种差异主要是VM机对的操作码调度造成的,它们往往比其他的因素昂贵,比如说及时汇编。)是Google等厂商合作开发的Android移动设备平台的核心组成部分之一。它可以支持已转换为 .dex(即Dalvik Executable)格式的Java应用程序的运行,.dex格式是专为Dalvik设计的一种压缩格式,适合内存和处理器速度有限的系统。Dalvik 经过优化,允许在有限的内存中同时运行多个虚拟机的实例,并且[1] 每一个Dalvik 应用作为一个独立的Linux 进程执行。独立的进程可以防止在虚拟机崩溃的时候所有程序都被关闭。2014年6月25日,Android L 将正式亮相于召开的谷歌I/O大会,Android L 改动幅度较大,谷歌将直接删除Dalvik,代替它的是传闻已久的ART。安卓4.4新增的ART模式优化更高,运行更为高效,占用更小的RAM内存以及显著提升流通流畅性,更省电,但目前APP启动和兼容还优待提高。

JVM的"发家"史

除了上述虚拟机外,这里再介绍两款真正高性能的java虚拟机,他们都是针对特殊平台开发的。

Azul VM基于HotSpot基础上改进所得,每个Azul VM实例都可以管理至少数十个CPU和数百GB内存的硬件资源,并提供巨大内存范围内实现可控的GC时间的垃圾收集器、为专用硬件优化的线程调度等优秀特性。现在主要用于Vega平台,在x86平台上也已经接近在Vega上的性能。

Liquid VM即现在的JRockit VE(Virtual Edition)版本,自身实现了一个专用操作系统的必要功能,是“由虚拟机越过操作系统直接控制硬件”的模式,更能发挥硬件性能,提升java程序性能。