首先经过介绍Dalvik的时候咱们就知道Dalvik运行的是dex文件,而JVM运行的是class文件。程序员
Dalvik VM是基于寄存器的架构,而JVM是栈机。因此Dalvik VM的好处是能够作到更好的提早优化(ahead-of-time optimization)。 另外基于寄存器架构的VM执行起来更快,可是代价是更大的代码长度。 ~~ 基于寄存器架构的虚拟机有这么多的好处,为何以前设计JAVA的程序员没有采用呢,而是采用如今基于栈的架构开发的呢?由于基于栈的虚拟机也有它的优势,它不对host平台的寄存器数量作假设,有利于移植到不懂的平台,这也符合的Java跨平台的特色。而Dalvik虚拟机则不关心这些,由于它原本就是为ARM这样的多寄存器平台设计的,另外Dalvik被移植到x86机器上,即便x86这种寄存器少的平台,寄存器架构的虚拟机也能够运行。 ~~ 通常来讲,基于堆栈的机器必须使用指令才能从堆栈上的加载和操做数据,所以,相对基于寄存器的机器,它们须要更多的指令才能实现相同的性能。可是基于寄存器机器上的指令必须通过编码,所以,它们的指令每每更大。架构
在编译时提早优化代码而不是等到运行时 虚拟机很小,使用的空间也小;被设计来知足可高效运行多种虚拟机实例。 常量池已被修改成只使用32位的索引,以简化解释器 标准Java字节码实行8位堆栈指令,Dalvik使用16位指令集直接做用于局部变量。局部变量一般来自4位的“虚拟寄存器”区。这样减小了Dalvik的指令计数,提升了翻译速度。性能
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)。这样的话,应用的启动(首次)和执行都会变得更加快速。编码
优势:翻译
系统性能的显著提高。 应用启动更快、运行更快、体验更流畅、触感反馈更及时。 更长的电池续航能力。 支持更低的硬件。设计
缺点:索引
机器码占用的存储空间更大,字节码变为机器码以后,可能会增长10%-20%(不过在应用包中,可执行的代码经常只是一部分。好比最新的 Google+ APK 是 28.3 MB,可是代码只有 6.9 MB。) 应用的安装时间会变长。开发