【发布时间】:2012-11-14 16:34:06
【问题描述】:
是为每个应用创建一个 Dalvik 虚拟机实例,还是所有 Android 应用共享同一个 Dalvik 虚拟机实例?
【问题讨论】:
是为每个应用创建一个 Dalvik 虚拟机实例,还是所有 Android 应用共享同一个 Dalvik 虚拟机实例?
【问题讨论】:
每个 Android 应用程序都在自己的进程中运行,并具有自己的 Dalvik 虚拟机实例。 Dalvik 的编写使得一个设备可以高效地运行多个 VM。
Dalvik VM 以 Dalvik Executable (.dex) 格式执行文件,该格式已针对最小内存占用进行了优化。
VM 是基于寄存器的,运行由 Java 语言编译器编译的类,这些类已被包含的 dx 工具转换为 .dex 格式。
还可以查看What is... The Dalvik Virtual Machine 了解有关 DVM 的详细说明。
【讨论】:
Dalvik 虚拟机专为 Android 构建。它旨在解决电池寿命和处理能力问题,并且免费。
我们使用 Dalvik VM 代替 Java 虚拟机 (JVM),因为 Java 编译器、Java 工具是免费的,但 JVM 不是免费的,所以来自 Google 的 Android 开发人员制作了自己的虚拟机,并使其免费。
虚拟机是必要的,因为虚拟机作为虚拟计算机有助于调试,因此我的应用程序可以以相同的方式运行不同的设备
【讨论】:
.java 文件被提供给 java 编译器 (javac) 以生成 .class 文件。
所有.class 文件都提供给dx 工具以生成单个dex 文件。
dex 文件被提供给 Dalvik VM 以生成最终的机器代码。
最终的机器码交给 CPU 执行。
【讨论】:
所有apk的基本源代码都是java语言。当您构建这个项目时,所有 .java 文件都被转换为 .class 现在 adk 的 dx 工具将所有 .class 文件转换为 classes.dex 文件。这个 classes.dex 文件在 dalvik 虚拟机上执行。
有关 dalvik 虚拟机的更多信息:http://www.slideshare.net/jserv/understanding-the-dalvik-virtual-machine
Dalvik 虚拟机旨在一次运行多个虚拟机。 因此,每个应用程序都在自己的进程中运行,正如@sahilMahajanMj 所说,拥有自己的 Dalvik 虚拟机实例。
并且这个 classes.dex 文件被进一步优化为 odex 文件并保存在 /dalvik/dalvik-cache
想了解更多关于odex的信息click this。
如果你想知道为什么 DVM for android 为什么不是 JVM click this
【讨论】:
Dalvik 是一个虚拟机,每个 android 应用程序都在其中运行。通过 Dalvik,设备能够通过更好的内存管理运行多个虚拟机,因为 Dalvik 虚拟机是基于寄存器的,因此内存效率很高
每个 android 应用程序都在自己的进程中运行,并具有自己的 Dalvik VM 实例。 首先,Java 文件通过 java 编译器转换为 .class 文件 .class 文件被提供给“dx”工具,该工具将其转换为 .dex 格式 .dex 文件提供给 DVM 以生成机器代码 机器码由 CPU 执行
.apk 文件包含 .dex 压缩格式的文件,可以在 Dalvik 虚拟机上运行
为什么选择 Dalvik? 1. DVM 专为电池寿命、处理能力及其免费而打造 2. 我们使用 DVM 而不是 JVM,因为 JVM 不是免费的 Dalvik VM 提供了跨所有移动设备的一致性,即一个应用程序将以相同的方式跨不同设备运行
【讨论】: