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)成机器码,这样的话,虽然设备和应用的首次启动(安装慢了)会变慢,但是以后每次启动执行的时候,都可以直接运行,因此运行效率会提高。

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