剖析 Android Runtime:DVM vs ART

原文链接 Closer Look At Android Runtime: DVM vs ART

在直接进入 Android Runtime 之前,我们需要了解什么是运行时环境,还需要了解一些基本的东西,如 JVM 和 Dalvik VM 的功能。 

什么是运行时(runtime)?

在最简单的术语中,它是操作系统使用的系统,它负责将您使用 Java  等高级语言编写的代码转换为 CPU /处理器 可以理解的机器码。

运行时包含在程序运行时执行的软件指令,即使它们本质上不是该软件代码的一部分。

CPU,或更通用的术语,我们的计算机,只理解机器语言(二进制代码),所以为了使它在 CPU 上运行,必须将代码转换为机器码,这是由转换器完成的。

下面是按顺序生成的转换器-

1. Assemblers (汇编器):

它直接将汇编代码转换为机器码,因此速度非常快。

2. Compilers (编译器):

它将代码转换为可汇编代码,然后使用汇编器将代码转换为二进制代码。使用编译器编译很慢但执行速度很快。但编译器的最大问题是生成的机器码依赖于平台。换句话说,在一台机器上运行的代码可能无法在不同的机器上运行。

3. Interpreters (解释器):

它在执行代码时转换代码。因为转换是在运行时进行的,所以执行速度很慢。

JAVA 代码的执行是如何工作的?

为了保持代码的平台无关性,Java 开发了JVM,即 Java 虚拟机。它针对每个平台开发了 JVM,这意味着 JVM 依赖于平台。Java 编译器将 .java 文件转换为 .class 文件,称为字节码。这个字节码被提供给将其转换为机器码的 JVM。

这比 解释 快,但比 C++ 编译慢。

Android 代码的执行是如何工作的?

在 Android 中 Java 类被转换为 DEX 字节码。 DEX 字节码格式通过 ART 或 Dalvik 运行时转换为本地机器码。这里 DEX 字节码是独立于设备架构的。

Dalvik 是一个基于 JIT(即时)编译的引擎。使用 Dalvik 有一些缺点,因此从 Android 4.4(kitkat)开始,ART 作为运行时引入,从Android 5.0(Lollipop)开始,它已完全取代  Dalvik。Android 7.0 在 Android runtime (ART) 中添加了一个具有代码分析功能的即时(JIT)编译器,可以在 Android apps 运行时不断提高其性能。

要点:Dalvik 使用 JIT(即时)编译,而 ART 使用 AOT(提前)编译。

下面是解释 Dalvik 虚拟机和 Java 虚拟机之间区别的代码片段。

Just In Time (JIT)

使用 Dalvik JIT 编译器,每次运行应用程序时,它都会动态地将 Dalvik 字节码的一部分转换为机器码。随着执行的进行,会编译和缓存更多的字节码。由于 JIT 只编译代码的一部分,所以它占用的内存更小,并且在设备上使用的物理空间也更少。

Ahead Of Time (AOT)

ART 配备了提前编译器。在应用程序的安装阶段,它静态地将 DEX 字节码转换为机器码并存储在设备的存储中。这是在设备上安装应用程序时发生的一次性事件。由于不需要 JIT 编译,代码执行速度要快得多。

由于 ART 直接运行 app 的机器码(本地执行),它不会像在 Dalvik 上编译即时代码那样对 CPU 造成严重影响。因为 CPU 使用率较低,所以电池消耗较少。

ART 还使用与 Dalvik 输入相同的 DEX 字节码。使用 ART 编译的应用程序在安装应用程序时需要额外的编译时间,并占用稍大的空间来存储编译的代码。

为什么 Android 要使用虚拟机(Virtual Machine)?

Android 使用虚拟机作为其运行时环境,以便运行构成 Android 应用程序的 APK 文件。 其优点如下:

· 应用程序代码与核心 OS 隔离。所以即使任何代码包含一些恶意代码也不会直接影响系统文件。它使 Android OS 更加稳定可靠。

· 它提供跨兼容性或平台独立性。这意味着即使应用程序是在 PC 等平台上编译的,它仍然可以使用虚拟机在移动平台上执行。

ART 的好处

· 在安装期间完成 DEX 字节码转换后,应用程序运行得更快。

· 由于直接执行本地代码,减少了应用程序的启动时间。

· 因为逐行解释字节码所用的电源被节省,电池性能得到提高。

· 改进的垃圾收集器。

· 改进的开发者工具。

ART 的缺点

· 由于 DEX 字节码在安装过程中转换为机器码,因此 App 安装需要更多时间。

· 由于安装时生成的本地机器码存储在内部存储中,因此需要更多内部存储。

结论

ART 是为了通过执行 DEX 文件从而在低内存设备上运行多个虚拟机而编写的,DEX 文件是专为 Android 设计的字节码格式,专为最小内存占用而优化。它使UI感觉起来更具响应性。这就是我个人的理解。有关 ART 和 Dalvik 的更多详细信息,您可以浏览 官方 Android 文档

猜你喜欢

转载自blog.csdn.net/qq_33404903/article/details/88845997