DVM 和 ART 有啥区别?为啥在 Lollipop 中 DVM 已正式被 ART 取代?

Posted

技术标签:

【中文标题】DVM 和 ART 有啥区别?为啥在 Lollipop 中 DVM 已正式被 ART 取代?【英文标题】:What is difference between DVM and ART ? Why DVM has been officially replaced with ART in Lollipop?DVM 和 ART 有什么区别?为什么在 Lollipop 中 DVM 已正式被 ART 取代? 【发布时间】:2015-11-04 14:40:05 【问题描述】:

android Lollipop 以来,Google 已将 DVM 替换为 ART,因为 ART 比 DVM 更快。还有其他原因吗?

【问题讨论】:

你说的是 ART 而不是 ARM? addictivetips.com/android/… @Raghunandan 是的,我是 【参考方案1】:

ART 带来了一些主要的性能改进,这是 Dalvik 所缺乏的。但是每个优点也都有一些缺点。我将尝试在这里讨论优点和缺点。

1) 编译方法

这是迄今为止 ART 相对于 Dalvik 的最大优势。 老家伙 Dalvik 使用即时 (JIT) 方法,其中编译是按需完成的。所有 dex 文件仅在需要时才转换为各自的原生表示。

但是ART 使用提前 (AOT) 方法,其中 dex 文件是在需要它们之前编译的。这本身极大地提高了任何 Android 设备的性能和电池寿命。

例如

在 Dalvik 的情况下,每当您触摸应用程序图标将其打开时,必要的 dex 文件都会转换为其等效的本机代码。该应用程序只有在编译完成后才会开始工作。因此,在此完成之前,应用程序没有响应。

此外,每次打开应用程序时都会重复此过程,从而浪费 CPU 周期和宝贵的电池电量。

但在 ART 的情况下,每当您安装应用程序时,所有 dex 文件都会一劳永逸地转换。因此,安装需要一些时间,并且应用程序比 Dalvik 占用更多空间,但性能得到了大幅提升,电池寿命也得到了巧妙的节省

2) 开机时间

在 Dalvik 的情况下,缓存是随着设备运行和应用程序的使用时间而构建的,正如 JIT 方法所指示的那样。 所以启动时间非常快。

但在 ART 的情况下,缓存是在第一次启动期间构建的,因此在 ART 的情况下启动时间要长得多。有时您在启动时可能会看到“优化应用程序”对话框。

3) 空间使用

在 ART 上运行的应用程序使用的空间远远超过 Dalvik。 就像 Dalvik 上的 20 MB 应用程序一样,在 ART 上占用超过 35 MB。

所以如果您使用的是低存储设备,那么这对您来说可能是一个巨大的劣势

4) ART 太快了

如上所述,ART 非常快速流畅。应用程序非常活泼且响应迅速。 Dalvik 和 ART 之间的任何比较,都肯定会让 ART 设备大获全胜。

ART 是所有认为 ios 比 Android 更快、更流畅且电池效率更高的人的答案。

【讨论】:

" 所有源文件仅在需要时才转换为各自的字节码表示形式。"这是错误的。 JIT 就是将 Dalvik 字节码编译为本机代码。您怎么能期望客户系统中存在源文件? @Infinite 感谢您的更正,已相应地编辑了答案。 其中一些信息不再正确。例如,由于 Android N 的启动时间不再慢。编译时间也很快,因为它切换到 JIT 编译器进行运行时分析和优化 写得很好。有帮助【参考方案2】:

在 Android Lolipop 中,DVM 已被 ART 取代。因为 DVM 会在您每次启动特定应用程序时转换字节码。但是 ART 在应用程序安装时只转换一次。这使得 CPU 执行更容易。 ARM 是一种架构。像 MIPS、x86 等。DVM/ART 运行在 ARM 之上。两者都不能互相替代。我希望这能消除您的困惑。

【讨论】:

OP 从来没有提到 ARM(除非它被提及和编辑,但我只看到 ART)。【参考方案3】:

在 Android 4.4 及以上版本中,Google 与 Dalvik 一起推出了名为“ART”的新 Android Runtime。

ART 与 Dalvik 的区别

ART (Android RunTime) 的主要特点是 Ahead-of-Time (AOT) 编译,

AOT 与 JIT

Android 应用程序格式为 .apk,所有 Java 类都转换为 DEX 字节码。 DEX 字节码格式独立于设备架构,需要翻译成本机机器码才能在设备上运行。这对于 ART 和 Dalvik 运行时都是一样的。

主要区别,ART(Android RunTime)使用Ahead-of-Time(AOT)编译,Dalvik使用Just-in-Time(JIT)编译

使用Dalvik,每次应用运行时即时(JIT)编译,将dex字节码转换为机器码并缓存。

看这里更详细 http://androidboost.over-blog.com/2016/10/art-vs-dalvik.html

【讨论】:

【参考方案4】:

自 kitkat(Android 4.4 版)以来,Google 已将运行时 DVM 替换为 ART。谷歌这样做是因为它会在应用程序启动时提高性能。在 DVM 中,当您单击应用程序时,它会编译字节码 DEX 并将其转换为机器码,通常称为 JIT(即时)。 ART 不再在每次应用程序启动时都运行编译过程,而是通过转换字节码 DEX 并在应用程序安装步骤将其转换为机器码来改变这种方式。安装应用程序时这可能需要很长时间,但启动应用程序时会更快。

【讨论】:

不,当你点击它时,DVM 不会编译应用程序。它按原样解释字节码,有时,如果确实需要,可能会编译部分代码 (JIT)。

以上是关于DVM 和 ART 有啥区别?为啥在 Lollipop 中 DVM 已正式被 ART 取代?的主要内容,如果未能解决你的问题,请参考以下文章

Android类加载(一)——DVM、ART、Dexopt、DexAot名词解析

Dalvik虚拟机和Art虚拟机

Andriod——区别DVM与JVM

Andriod——区别DVM与JVM

java jvm和android DVM区别

Android-JVM与DVM区别