众所周知,在Android 5.0的时,正式将默认的Android App的运行环境由原来的Dalvik改变成了ART,那他们其中是什么区别的呢,对Android App的运行又有什么影响呢?
Dalvik的了解
Dalvik诞生于2000年代中期,那个时候移动设备的处理器速度相对较慢,内存也很有限。因此,Dalvik无法充分利用如今这些移动硬件,更快的CPU和GPU、更大的内存以及高分辨率屏幕。相反,新的ART平台就是专了发挥多核架构和64位指令集的优势而设计的。
Dalvik使用JIT编译技术:这种方案使应用程序的部分指令在运行的时候得到转换。JIT的优势是,应用程序没有运行的时候,它占用的内存相对较小。劣势是一边运行一边转换会使应用程序的性能变差。
ART的了解
ART相比Dalvik的区别是他它用的是ahead-of-time(AOT)编译技术。在ART中,一个应用程序的所有指令在运行前就编译好了。所以ART之所以会比Dalvik快,是因为ART执行的是本地机器指令。并且ART平台发挥多核架构和64位指令集的优势而设计的新的ART平台牺牲了内存来换取性能
ART的另一个重大改进是垃圾回收算法。Dalvik的垃圾回收分为两个阶段。第一个阶段,Dalvik暂停所有的线程来分析堆的使用情况。第二个阶段,Dalvik暂停所有线程来清理堆。因此,Dalvik中一次典型的垃圾回收耗时约10毫秒——这已经足够导致应用在性能上的“卡顿”(这里的术语“卡顿”指的是界面元素在屏幕上断断续续地移动。通常,糟糕的性能会导致应用在动画上丢帧。丢帧是卡顿的重要原因。)
在 APP 安装的时候使用 dex2oat 工具直接把 DEX 文件转换为机器码文件,运行的时候以机器码方式运行,可以充分利用系统性能;此外,改进的内存回收机制使得 ART 运行模式下的内存回收速度只有 Dalvik 运行时模式下的 50%,也能够提升系统运行速度。
ART与Dalvik简要说明
- ART支持64的指令集和多核架构。但这对增加内存的占用
- ART改进了垃圾回收算法,减少了在线程中回收垃圾的卡顿时间。
- App安装速度要慢与Dalvik环境下。
- 由于采用的是预编译的机制,APP占用的空间比Dalvik多上不少
深入
参考
http://www.infoq.com/cn/news/2014/07/art-runtime
http://36kr.com/p/213223.html
http://www.geekpark.net/topics/193134