什么是 Dalvik 和 dalvik-cache?

Posted

技术标签:

【中文标题】什么是 Dalvik 和 dalvik-cache?【英文标题】:What is Dalvik and dalvik-cache? 【发布时间】:2011-11-24 08:55:41 【问题描述】:

我知道这可能是 android 中的一个基本问题。但是

【问题讨论】:

【参考方案1】:

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 目录中,这样它就不必每次都执行优化过程加载应用程序。

【讨论】:

如果我删除这些 Dalvik 缓存会怎样?除了应用需要重新加载它的 Dalvik Cache 需要时间来加载之外,是否会有任何影响? 正确。没有任何影响,除了增加下一次加载时间,因为它是重建的。 正如有人在另一个重复问题上发布的那样,这是您的免费 wiki 链接“Dalvik 缓存是您 Android 的重要组成部分。您可以在此处阅读更多信息:en.wikipedia.org/wiki/Dalvik_%28software%29” 既然 VM 是 ART,为什么 Android Lollipop(版本 5)仍然有 Dalvik 缓存?有人告诉我这是为了兼容性,但我注意到它占用了大量空间(大约 900MB)。 Art 将 dex 文件编译成原生代码。编译后的代码现在存储在 dalvik-cache 中,带有艺术。【参考方案2】:

Dalvik 是基于 Java 的虚拟机,可在 Android 上运行 Android 应用程序。 Dalvik-cache 是 Dalvik VM 的缓存区,它是在 Dalvik VM 优化你的应用运行时创建的。

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

【讨论】:

【参考方案3】:

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

【讨论】:

@AndroidKiller 将是字节码或二进制图像,具体取决于 Dalvik 或 ART 的存在。不是图形图像。【参考方案4】:

Dalvik 缓存不再是现代 Android 版本的一部分; Android 4.4 KitKat 是最后一个使用这种结构的。详情请见https://en.wikipedia.org/wiki/Dalvik_(software)。

【讨论】:

以上是关于什么是 Dalvik 和 dalvik-cache?的主要内容,如果未能解决你的问题,请参考以下文章

apk安装路径

安卓手机怎么让文件占用内存变小

为什么“15。。。”会导致微信ANR?

为什么“15。。。”会导致微信ANR?

odex文件格式

Android学习--Assets资源文件读取及AssetManager介绍