DVM和ART有什么区别?为什么DVM在Lollipop中被正式替换为ART?

时间:2015-08-12 06:30:14

标签: java android dalvik

自Android Lollipop以来,Google已经用ART代替了DVM,因为ART比DVM更快。还有其他原因吗?

6 个答案:

答案 0 :(得分:80)

艺术带来的一些重大<强>性能改进在Dalvik中缺乏。但是每个职业选手都有一些缺点。我将尝试讨论这里的优点和缺点。


1)编制方法

这是迄今为止ART对Dalvik的最大优势。 老人Dalvik使用Just-In-Time(JIT)方法,其中编译是按需完成的。只有在需要时,所有dex文件才会转换为各自的本机表示。

ART使用Ahead-Of-Time(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更快更流畅且电池效率更高的人的答案。

答案 1 :(得分:2)

在Android Lolipop中,DVM已被ART取代。因为每次启动特定应用程序时DVM都会转换字节码。但ART在安装应用程序时只转换一次。这使CPU执行更容易。 ARM是一种架构。与MIPS,x86等一样,DVM / ART运行在ARM之上。他们俩都不能互相替换。我希望这可以解决你的困惑。

答案 2 :(得分:0)

Android 4.4 KitKat,谷歌决定推出一种在Android操作系统之上执行应用程序的新方法。让我们仔细看看这个名为 ART

的新运行时

ART是Google长达2年的秘密项目,旨在提升Android设备的性能。

Android L(5.0)ART已作为默认运行时(ART已完全取代Dalvik)。

ART(Android RunTime)是Dalvik的下一个版本。 Dalvik是Android系统用于运行Android应用程序的运行时,字节码和VM。

Dalvik基于JIT(及时)编译。这意味着每次运行应用程序时,其执行所需的部分代码将在此时转换(编译)为机器代码。当您浏览应用程序时,将编译和缓存其他代码,以便系统可以在应用程序运行时重用代码。由于JIT仅编译代码的一部分,因此它具有较小的内存占用并且在设备上使用较少的物理空间。

ART vs Dalvik / AOT vs JIT

ART对Dalvik的优势:

  1. 在ART的情况下,应用程序的启动速度非常快,因为在执行时没有编译任何内容。
  2. 启动速度比dalvik快,因为dalvik分区没有执行任何操作,例如dalvik中的odexed ROM
  3. 由于缺少应用程序执行的编译工作而减少了CPU工作,从而增加了备用电池。
  4. 改进垃圾收集(GC)
  5. 最后,对于开发人员来说,这是一个巨大的回报,因为大多数开发人员都担心odexed ROM比deodexed ROM更快,但是他们将解密他们的ROM,因为他们严重主题。在ART的情况下,无论ROM是索引还是deodex,都无关紧要,它会在安装应用程序时将完整代码编译成机器语言。所以即使是deodexed ROM也和ART中的索引一样快。
  6. ART的缺点

    1. 由于ART会在安装时预编译应用程序,因此安装后的空间比dalvik多10-20%。
    2. 由于dex字节码在安装时转换为本机代码,因此安装需要更多时间。
    3. 在我的Nexus 4上安装时间,对于我们的一个大项目,从 ~17秒跳到~25秒。

      Dalvik对抗ART基准测试结果(Android 4.4):Linpack

      单线程---&gt; Dalvik(135) ---&gt; ART(149) ---&gt;的 10.93%

      多线程---&gt; Dalvik(336) ---&gt; ART(383) ---&gt;的 13.82%

答案 3 :(得分:0)

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

ART与Dalvik的区别

ART(Android RunTime)具有主要功能Ahead-of-Time(AOT)编译,

AOT vs JIT

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

主要差异,ART(Android RunTime)使用Ahead-of-Time(AOT)编译,Dalvik使用即时(JIT)编译

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

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

答案 4 :(得分:0)

这里是一篇深入探讨ART与DVM的文章。 https://ayusch.com/art-vs-dvm-in-android/

它深入探讨了 stack register 架构之间的区别(DVM基于寄存器),以及AOT编译如何通过编译代码使ART比DVM快得多预先执行。

答案 5 :(得分:-1)

从kitkat(Android版本4.4)开始,Google已将运行时间 DVM 替换为 ART 。 Google之所以这样做,是因为它将在应用程序启动时提高性能。在DVM中,当您单击该应用程序时,它将编译字节码DEX并将其转换为机器码,通常称为JIT(即时)。 ART不再通过在应用程序每次启动时运行编译过程的方式,而是通过将字节码DEX转换为安装步骤中的应用程序时将其转换为机器代码的方式进行了更改。安装该应用程序可能会花费很长时间,但是启动该应用程序时它会足够快。