Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/352.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/193.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java DVM和ART的区别是什么?为什么DVM已经被棒棒糖中的艺术正式取代?_Java_Android_Dalvik - Fatal编程技术网

Java DVM和ART的区别是什么?为什么DVM已经被棒棒糖中的艺术正式取代?

Java DVM和ART的区别是什么?为什么DVM已经被棒棒糖中的艺术正式取代?,java,android,dalvik,Java,Android,Dalvik,自从安卓棒棒糖(Android Lollipop)问世以来,谷歌已经用ART取代了DVM,因为ART比DVM更快。还有其他原因吗?在Android Lolipop中,DVM已经被ART取代。因为每次你启动一个特定的应用程序时,DVM都会转换字节码。但ART在安装应用程序时只转换一次。这使得CPU执行更容易。ARM是一种体系结构。与MIPS、x86等类似,DVM/ART在ARM上运行。两者是不可替代的。我希望这能澄清你的困惑。艺术带来了一些重大的性能改进,这是Dalvik所缺乏的。但是每一个赞成者

自从安卓棒棒糖(Android Lollipop)问世以来,谷歌已经用ART取代了DVM,因为ART比DVM更快。还有其他原因吗?

在Android Lolipop中,DVM已经被ART取代。因为每次你启动一个特定的应用程序时,DVM都会转换字节码。但ART在安装应用程序时只转换一次。这使得CPU执行更容易。ARM是一种体系结构。与MIPS、x86等类似,DVM/ART在ARM上运行。两者是不可替代的。我希望这能澄清你的困惑。

艺术带来了一些重大的性能改进,这是Dalvik所缺乏的。但是每一个赞成者也有一些反对者。我将在这里尝试讨论优点和缺点


1) 汇编方法 这是迄今为止艺术相对于达尔维克的最大优势老家伙Dalvik使用即时(JIT)方法,在这种方法中,编译是按需完成的。所有的dex文件仅在需要时才转换为各自的本机表示形式

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

比如说

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

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

但就艺术而言,每当你安装一个应用程序时,所有的dex文件都会被一次性转换。因此,安装需要一些时间,应用程序比Dalvik占用更多空间,但是性能得到了极大的提高,电池寿命得到了巧妙的节约


2) 启动时间 对于Dalvik,缓存是按照JIT方法所指示的设备运行和应用程序使用的时间构建的因此启动时间非常快。

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


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

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


4) 艺术是他妈的快 如上所述,艺术是极其快速和流畅的。应用程序非常快速且响应迅速。任何对Dalvik和ART的比较,都肯定会使ART设备以显著优势获胜


ART回答了所有认为iOS比Android更快、更流畅、电池效率更高的人。

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

艺术与达尔维克的区别

ART(Android运行时)具有提前编译(AOT)的主要功能

AOT与JIT

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

主要区别在于,ART(Android运行时)使用了提前(AOT)编译,而Dalvik使用的是即时(JIT)编译

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

请参阅此处的更多详细信息

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

您是在谈论艺术而不是ARM吗?@Raghundan Yes i am“所有源文件仅在需要时才转换为各自的字节码表示形式。”这是错误的。JIT是将Dalvik字节码编译为本机代码。您怎么能期望源文件存在于客户的系统中?@无限感谢您的更正,我们已相应地编辑了答案。其中一些信息不再正确。例如,因为安卓N的启动时间不再慢了。编译时间也很快,因为它切换到JIT编译器进行运行时分析和优化,编写得很好。帮助OP从未提及ARM(除非它被提及和编辑,但我只看到艺术)。不,当你点击它时,DVM不会编译应用程序。它按原样解释字节码,如果确实需要,有时可能编译部分代码(JIT)。