相信大家应该都知道了,Android
4.4中谷歌为开发者提供了两种编译模式,一种是默认的Dalvik模式,而另外一种则是
ART模式。

1.什么是Dalvik?
Dalvik是Google公司自己设计用于Android平台的虚拟机。
Dalvik虚拟机是Google等厂商合作开发的Android移动设备平台的核心组成部分之一。
它可以支持已转换为
.dex格式的Java应用程序的运行,.dex格式是专为Dalvik设计的一种压缩格式,适合内存和处理器速度有限的系统。
Dalvik
经过优化,允许在有限的内存中同时运行多个虚拟机的实例,并且每一个Dalvik
应用作为一个独立的Linux
进程执行。独立的进程可以防止在虚拟机崩溃的时候所有程序都被关闭。
很长时间以来,Dalvik虚拟机一直被用户指责为拖慢安卓系统运行速度不如IOS的根源。
2014年6月25日,Android L 正式亮相于召开的谷歌I/O大会,Android L
改动幅度较大,谷歌将直接删除Dalvik,代替它的是传闻已久的ART。

长期以来Android系统的流畅性一直被不少用户诟病,其中固然有早期硬件配置较低的原因,但是固有的影响效率的Dalvik虚拟机才是其根源。安卓系统发展至今日谷歌也开始向该问题根源动手了。

现在最新的消息显示,谷歌正在对Android系统进行调整,简单点说就是ART已经取代Dalvik成为默认选项。一直以来,Dalvik虚拟机背负着Android应用卡顿的罪名,原因则是应用在运行的过程中,虚拟机Dalvik通过一个叫JIT(Just-in-time)的解释器动态的进行编译并执行,这一过程也拖慢了运行效率。

2.Dalvik和JVM区别
Dalvik是基于寄存器的,而JVM是基于栈的。
Dalvik运行dex文件,而JVM运行java字节码
自Android 2.2开始,Dalvik支持JIT(just-in-time,即时编译技术)。
优化后的Dalvik较其他标准虚拟机存在一些不同特性: 
1.占用更少空间 
2.为简化翻译,常量池只使用32位索引  
3.标准Java字节码实行8位堆栈指令,Dalvik使用16位指令集直接作用于局部变量。局部变量通常来自4位的“虚拟寄存器”区。这样减少了Dalvik的指令计数,提高了翻译速度。 
 当Android启动时,Dalvik VM
监视所有的程序(APK),并且创建依存关系树,为每个程序优化代码并存储在Dalvik缓存中。Dalvik第一次加载后会生成Cache文件,以提供下次快速加载,所以第一次会很慢。
 Dalvik解释器采用预先算好的Goto地址,每个指令对内存的访问都在64字节边界上对齐。这样可以节省一个指令后进行查表的时间。为了强化功能,
Dalvik还提供了快速翻译器(Fast Interpreter)。

在最新的Android
4.4中,谷歌就为用户提供了两种运行模式:Dalvik和ART,ART模式下应用在安装时就进行预编译操作,将原本在程序运行中时的编译动作提前到应用安装时。在省去解释代码这一过程之后,应用的运行效率会更高。下面就来看一下外媒通过谷歌Nexus5为我们带来的两种模式下系统运行速度对比视频。

与之形成鲜明对比的ART模式,则是在用户安装应用时就进行预编译操作,将原本在程序运行中时的编译动作提前到应用安装时。在省去解释代码这一过程之后,应用的运行效率会更高。

一般来说,基于堆栈的机器必须使用指令才能从堆栈上的加载和操作数据,因此,相对基于寄存器的机器,它们需要更多的指令才能实现相同的性能。但是基于寄存器机器上的指令必须经过编码,因此,它们的指令往往更大。

 Dalvik虚拟机既不支持Java SE 也不支持Java ME类库(如:Java类,AWT和Swing都不支持)。 相反,它使用自己建立的类库(Apache Harmony Java的一个子集)。

通过对比我们可以发现,开启ART后Nexus5开启速度有所提升,在大多数日常应用的体验中并未表现出明显的优势,但是在游戏等应用中加载速度则明显快于Dalvik虚拟机环境,跑分测试的表现也优于后者。虽然ART由于程序安装时预编译产生了程序安装文件变大等问题,但是相对Dalvik虚拟机其优势还是显而易见的。

此外,有开发者往Android开源项目中提交代码时发现,ART已经取代Dalvik成为默认选项,不过Dalvik并没有被放弃,这无疑是个不错的消息,对于今年将要到来的大改版Android
5.0来说,它的系统执行效率会更高。

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

与此同时,美国媒体给出的消息还称,谷歌会在今年的开发者大会上公布Android
5.0,其界面相比现在的版本来说,会有更大的变化,同时该系统还会加强平板的用户体验。

4.ART优缺点呢
优点:
1、系统性能的显著提升。
2、应用启动更快、运行更快、体验更流畅、触感反馈更及时。
3、更长的电池续航能力。
4、支持更低的硬件。
缺点:
1.机器码占用的存储空间更大,字节码变为机器码之后,可能会增加10%-20%(不过在应用包中,可执行的代码常常只是一部分。比如最新的
Google+ APK 是 28.3 MB,但是代码只有 6.9 MB。)
2.应用的安装时间会变长。

其实Android 4.4的ART选项已经预示了Android
5.0系统会出现重大改变,即彻底从Dalvik转换到ART,而这样带来的好处也是显而易见,比如iOS开发人员和其用户所引以为傲的流畅体验将不再是一个值得炫耀的东西。

tips:现在智能手机大部分都可以让用户选择使用Dalvik还是ART模式。当然默认还是使用Dalvik模式。
用法:设置-辅助功能-开发者选项(开发人员工具)-选择运行环境(不同的手机设置的步骤可能不一样)。

图片 1

参考文章:http://www.jianshu.com/p/58f817d176b7

图片 2

(文/驱动之家 )