什么是Dalvik和dalvik-cache?


80

我知道这可能是Android中的一个基本问题。但是什么是Dalvik和dalvik-cache?

Answers:


136

Dalvik是Android使用的虚拟机。尽管并不完全正确,但通常将其视为Java虚拟机。它使用与Java相同的对象模型,并且其内存模型也几乎相等。但是,dalvik VM是基于寄存器的VM,而不是基于堆栈的Java VM。

因此,它使用与Java完全不同的字节码。但是,Android SDK包含dx工具,可将Java字节码转换为dalvik字节码,这就是为什么您可以用Java编写Android应用程序的原因。

当您说“ dalvik-cache ”时,我假设您的意思是可以在典型的Android设备上找到的/ data / dalvik-cache目录。在Android上安装应用程序时,它会对该应用程序的dex文件(该文件包含该应用程序的所有dalvik字节码)进行一些修改和优化。然后,它将生成的odex(优化的dex)文件缓存/ data / dalvik-cache目录中,这样就不必在每次加载应用程序时都执行优化过程。

很好的参考


15
如果删除这些Dalvik缓存怎么办?除了应用程序需要重建它的Dalvik Cache之外,加载该应用程序会否有其他效果?
斯旺德,2012年

16
正确。在重建时,除了增加下一个加载时间外,没有任何影响。
JesusFreke 2012年

当有人在另一个重复的问题上发帖时,这是您的免费Wiki链接“ Dalvik缓存是Android的重要组成部分。您可以在此处了解更多信息:en.wikipedia.org/wiki/Dalvik_%28software%29
qneill

1
既然VM是ART,为什么Android Lollipop(第5版)仍然具有Dalvik缓存?有人告诉我这是为了兼容性,但是我注意到它占用了大量空间(大约900MB)。
Android开发人员

3
Art将dex文件编译为本地代码。该编译后的代码现在与art一起存储在dalvik缓存中。
JesusFreke 2015年

3

Dalvik是基于Java的虚拟机,可在Android上运行Android Apps。Dalvik缓存是Dalvik VM的缓存区域,它是在Dalvik VM优化您的应用程序以使其运行时创建的。

如果需要,您可以在Internet上查找有关Dalvik VM操作码和“常规” Java VM操作码之间差异的更多信息。


0

Dalvik缓存不过是应用程序代码的临时编译而被存储为可执行文件。由于可以从位于Dalvik缓存之外的原始应用程序代码动态地编译这些代码,因此您可以清除Dalvik缓存而不会产生任何实际损失。


@AndroidKiller可能是字节码或二进制图像,具体取决于Dalvik或ART的存在。不是图形图像。
尼尔·斯坦纳

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.