Dalvik和dalvik-cache是什么?

82
我知道这可能是一个在Android中比较基础的问题。但是Dalvik和dalvik-cache是什么?
4个回答

142
Dalvik是Android所使用的虚拟机。虽然它通常被认为是Java虚拟机,但这并不完全正确。它使用的对象模型与Java完全相同,其内存模型也非常相似。但是Dalvik虚拟机是基于寄存器的,而不是基于堆栈的Java虚拟机。
因此,它使用的字节码与Java完全不同。但是,Android SDK包括dx工具,以将Java字节码转换为Dalvik字节码,这就是为什么您可以使用Java编写Android应用程序的原因。
当您说“dalvik-cache”时,我想您指的是在典型的Android设备上可以找到的/data/dalvik-cache目录。在Android上安装应用程序时,它会对该应用程序的dex文件(包含应用程序的所有Dalvik字节码的文件)进行一些修改和优化。然后,它会将生成的odex(优化过的dex)文件缓存到/data/dalvik-cache目录中,以便在每次加载应用程序时不必执行优化过程。 好的参考

16
如果我删除这些Dalvik缓存,除了应用程序需要重新构建它的Dalvik缓存而需要加载时间之外,是否还会有其他影响? - Swanand
17
正确。重建后除了增加下一次加载时间外,没有其他影响。 - JesusFreke
正如其他重複的問題中有人發布的帖子一樣,這裡是你不必要的維基鏈接:“Dalvik緩存是Android的重要組成部分。你可以在這裡閱讀更多關於它的信息:http://en.wikipedia.org/wiki/Dalvik_%28software%29”。 - qneill
1
为什么Android Lollipop(版本5)在VM是ART的情况下仍然有Dalvik缓存?有些人告诉我这是为了兼容性,但我注意到它占用了很多空间(约900MB)。 - android developer
3
艺术编译器将dex文件编译为本地代码。那个编译好的代码现在与Art一起存储在dalvik-cache中。 - JesusFreke
注意:删除会破坏应用程序,导致其无法启动。但在设备重新启动后,dalvik-cache 将被恢复,一切都将正常工作。这是在 MTK 设备上发现的。 - Solata

3
Dalvik是基于Java的虚拟机,用于在Android上运行应用程序。Dalvik-cache是Dalvik VM的缓存区域,在Dalvik VM为运行您的应用程序进行优化时创建。
如果您想了解Dalvik VM操作码与“普通”Java VM操作码之间的差异,可以在互联网上查找更多信息。

0

0
Dalvik缓存实际上是应用程序代码的临时编译,以可执行文件的形式存储。由于这些可以从位于Dalvik缓存之外的原始应用程序代码动态编译,因此您可以清除Dalvik缓存而不会受到任何真正的惩罚。

@AndroidKiller 这将是字节码或二进制图像,取决于Dalvik或ART的存在。不是图形图像。 - Neil Steiner

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接