JVM,Dalivk,ART的区别

1,595 阅读3分钟

Dalvik和JVM的主要区别

首先通过介绍Dalvik的时候我们就知道Dalvik运行的是dex文件,而JVM运行的是class文件。

Dalvik VM是基于寄存器的架构,而JVM是栈机。所以Dalvik VM的好处是可以做到更好的提前优化(ahead-of-time optimization)。 另外基于寄存器架构的VM执行起来更快,但是代价是更大的代码长度。 ~~ 基于寄存器架构的虚拟机有这么多的好处,为什么之前设计JAVA的程序员没有采用呢,而是采用现在基于栈的架构开发的呢?因为基于栈的虚拟机也有它的优点,它不对host平台的寄存器数量做假设,有利于移植到不懂的平台,这也符合的Java跨平台的特点。而Dalvik虚拟机则不关心这些,因为它本来就是为ARM这样的多寄存器平台设计的,另外Dalvik被移植到x86机器上,即使x86这种寄存器少的平台,寄存器架构的虚拟机也可以运行。 ~~ 一般来说,基于堆栈的机器必须使用指令才能从堆栈上的加载和操作数据,因此,相对基于寄存器的机器,它们需要更多的指令才能实现相同的性能。但是基于寄存器机器上的指令必须经过编码,因此,它们的指令往往更大。

Dalvik在JVM上的优化

在编译时提前优化代码而不是等到运行时 虚拟机很小,使用的空间也小;被设计来满足可高效运行多种虚拟机实例。 常量池已被修改为只使用32位的索引,以简化解释器 标准Java字节码实行8位堆栈指令,Dalvik使用16位指令集直接作用于局部变量。局部变量通常来自4位的“虚拟寄存器”区。这样减少了Dalvik的指令计数,提高了翻译速度。

Dalivk进化之ART

2014年6月25日,Android L 正式亮相于召开的谷歌I/O大会,Android L 改动幅度较大,谷歌将直接删除Dalvik,代替它的是传闻已久的ART。

ART:即Android Runtime ART 的机制与 Dalvik 不同。在Dalvik下,应用每次运行的时候,字节码都需要通过即时编译器(just in time ,JIT)转换为机器码,这会拖慢应用的运行效率,而在ART 环境中,应用在第一次安装的时候,字节码就会预先编译成机器码,使其成为真正的本地应用。这个过程叫做预编译(AOT,Ahead-Of-Time)。这样的话,应用的启动(首次)和执行都会变得更加快速。

ART的优缺点

优点:

系统性能的显著提升。 应用启动更快、运行更快、体验更流畅、触感反馈更及时。 更长的电池续航能力。 支持更低的硬件。

缺点:

机器码占用的存储空间更大,字节码变为机器码之后,可能会增加10%-20%(不过在应用包中,可执行的代码常常只是一部分。比如最新的 Google+ APK 是 28.3 MB,但是代码只有 6.9 MB。) 应用的安装时间会变长。