Android Dalvik 和 ART

前言

说到Android 运行时,就不得不提两大技术:Dalvik和ART(Android RunTime)。

Dalvik和ART分别是什么

Dalvik

Dalvik VM是Google公司自己设计用于Android平台的虚拟机。支持已转换为** .dex格式**的Java应用程序的运行,.dex格式是专为Dalvik设计的一种压缩格式,适合内存和处理器速度有限的系统。

Dalvik 经过优化,允许在有限的内存中同时运行多个虚拟机的实例,并且每一个Dalvik 应用作为一个独立的Linux 进程执行。独立的进程可以防止在虚拟机崩溃的时候所有程序都被关闭。

很长时间以来,Dalvik虚拟机一直被用户指责为拖慢安卓系统运行速度不如IOS的根源。

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)。这样的话,应用的启动(首次)和执行都会变得更加快速。

区别:

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)。

ART有什么优缺点呢?

优点:

1、系统性能的显著提升。

2、应用启动更快、运行更快、体验更流畅、触感反馈更及时。

3、更长的电池续航能力。

4、支持更低的硬件。

缺点:

1.机器码占用的存储空间更大,字节码变为机器码之后,可能会增加10%-20%

2.应用的安装时间会变长


总结:

Dalvik 每次运行都是    .dex字节码→机器码→运行。

而ART是   安装时  .dex字节码→机器码,运行时机器码→运行。


参考  https://www.jianshu.com/p/12de32b31836

你可能感兴趣的:(Android Dalvik 和 ART)