Android Dalvik和ART的区别
ART
是一种在Android操作系统上的运行环境,ART能够在第一次安装的时候,把应用程序的字节码转换为机器码。采用了预编译(AOT,Ahead-Of-Time)技术。
Android Runtime (ART) 是 Android 上的应用和部分系统服务使用的托管式运行时。ART 及其前身 Dalvik 最初是专为 Android 项目打造的。作为运行时的 ART 可执行 Dalvik 可执行文件并遵循 Dex 字节码规范。
ART 和 Dalvik 是运行 Dex 字节码的兼容运行时,因此针对 Dalvik 开发的应用也能在 ART 环境中运作。不过,Dalvik 采用的一些技术并不适用于 ART。有关最重要问题的信息,请参阅在 Android Runtime (ART) 上验证应用行为。
从Android 5.0(version 21)版起,Android Runtime(ART)取代Dalvik成为系统内默认虚拟机。
ART的优点
- ART 性能高于采用JIT的Dalvik
- 应用启动更快、运行更快、体验更流畅、触感反馈更及时
- 更长的电池续航能力
- 支持更低的硬件
ART的缺点
- 字节码变为机器码之后,占用的存储空间更大
- 应用的安装时间会变长。
Dalvik
Dalvik虚拟机,是Google等厂商合作开发的Android移动设备平台的核心组成部分之一。它可以支持已转换为.dex(即“Dalvik Executable”)格式的Java应用程序的运行。.dex格式是专为Dalvik设计的一种压缩格式,适合内存和处理器速度有限的系统。
大多数虚拟机包括JVM都是一种堆栈机器,而Dalvik虚拟机则是寄存器机。两种架构各有优劣,一般而言,基于堆栈的机器需要更多指令,而基于寄存器的机器指令更长。
Dalvik虚拟机早期并没有使用即时编译(JIT)技术。从Android 2.2开始, Dalvik虚拟机也支持JIT.
JVM和Dalvik的差异
- Dalvik虚拟机有自己的字节码,并非使用Java字节码。
- Dalvik基于寄存器,而JVM基于堆栈。
- Dalvik VM通过Zygote进行类别的预加载,Zygote会完成虚拟机的初始化,也是与JVM不同之处。
Dalvik 和 ART的差异
在Dalvik虚拟环境下,程序的每次运行都会将dex字节码转换为机器码(JIT技术)。这样虽然会降低应用的安装时间(字节码比机器码要小),但是会导致应用的启动时间变慢。
在ART环境下,应用在第一次安装的时候,字节码就会预编译(AOT)成机器码,这样的话,虽然设备和应用的首次启动(安装慢了)会变慢,但是以后每次启动执行的时候,都可以直接运行,因此运行效率会提高。