每个应用程序都会创建一个Dalvik虚拟机实例吗?

56

每个应用程序都会创建一个Dalvik虚拟机实例,还是所有Android应用程序共享同一个Dalvik虚拟机实例?

5个回答

63

根据开发者文档:

每个Android应用程序在其自己的进程中运行,拥有自己的 Dalvik 虚拟机实例。Dalvik 被编写成能够使设备高效地运行多个虚拟机。

Dalvik VM 在 Dalvik 可执行文件(.dex)格式中执行文件,该格式经过优化以达到最小内存占用。

该虚拟机是基于寄存器的,并且运行Java语言编译器编译并转换为 .dex 格式的类,包括了 dx 工具。

还可以参考“什么是Dalvik虚拟机”,了解有关DVM的详细说明。


1
是的,在一般情况下,一个应用程序可以配置为使用多个进程,并且来自同一发布者的多个应用程序配置为在相同的用户ID下运行可以共享一个进程。 - Chris Stratton

38
  1. Dalvik虚拟机是专为Android构建的。它为解决电池续航和处理能力问题而设计,且免费。

  2. 我们使用Dalvik VM代替Java虚拟机(JVM),因为Java编译器和工具是免费的,但JVM不是免费的。因此,Google的Android开发人员制作了自己的虚拟机,并使其免费。

  3. 虚拟机是必需的,因为虚拟机有助于调试,就像一个虚拟计算机一样,使我的应用程序可以在不同的设备上以相同的方式运行。

图片表示

IMG


32
给定一个.java文件,通过Java编译器(javac)生成.class文件。所有的.class文件都被提供给dx工具来生成单个的dex文件。Dex文件被传递给Dalvik VM来生成最终的机器码。最终的机器码被传递给CPU执行。

1
这个回答如何回答原始问题? - nbro

14

所有apk的基本源代码均使用Java语言编写。当您构建此项目时,所有.java文件都会转换为.class文件,现在adk的dx工具将所有.class文件转换为classes.dex文件。这个classes.dex文件在Dalvik虚拟机上执行。

了解更多关于Dalvik虚拟机的信息:点击这里

Dalvik虚拟机旨在同时运行多个虚拟机。 因此,每个应用程序都在自己的进程中运行,并带有自己的Dalvik虚拟机实例,如@sahilMahajanMj所说。

这个classes.dex文件进一步优化为odex文件并保存在/dalvik/dalvik-cache中。
要了解更多关于odex的信息,点击这里

如果您想知道为什么Android使用DVM而不是JVM,点击这里


@NoBugs:稍等一下,我正在检查。 - Imposter
不行,这可能是你登录的网站引起的。 - NoBugs
当您构建此项目时,所有的 .java 文件都会被转换为 .class 是谁在执行这个操作 - A J
@bumba Java编译器会执行此操作。 - DevAndroid

1
Dalvik是一个虚拟机,每个Android应用程序都在其中运行。通过Dalvik,设备能够通过更好的内存管理运行多个虚拟机,因为Dalvik VM是基于寄存器的,因此内存效率更高。
每个Android应用程序在其自己的进程中运行,具有自己的Dalvik VM实例。 首先,Java文件通过Java编译器转换为.class文件 .dx工具将.class文件转换为.dex格式 .dex文件交给DVM以产生机器代码 机器代码由CPU执行
.apk文件以zip格式包含.dex文件,可以在Dalvik VM上运行
为什么选择Dalvik? 1. DVM专为电池寿命、处理能力和免费而构建 2. 我们使用DVM而不是JVM,因为JVM不是免费的 Dalvik VM在所有移动设备上提供一致性,即一个应用程序将在不同设备上以相同的方式运行。

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