每个应用程序都会创建一个Dalvik虚拟机实例,还是所有Android应用程序共享同一个Dalvik虚拟机实例?
根据开发者文档:
每个Android应用程序在其自己的进程中运行,拥有自己的 Dalvik 虚拟机实例。Dalvik 被编写成能够使设备高效地运行多个虚拟机。
Dalvik VM 在 Dalvik 可执行文件(
.dex
)格式中执行文件,该格式经过优化以达到最小内存占用。该虚拟机是基于寄存器的,并且运行Java语言编译器编译并转换为
.dex
格式的类,包括了dx
工具。
还可以参考“什么是Dalvik虚拟机”,了解有关DVM的详细说明。
Dalvik虚拟机是专为Android构建的。它为解决电池续航和处理能力问题而设计,且免费。
我们使用Dalvik VM代替Java虚拟机(JVM),因为Java编译器和工具是免费的,但JVM不是免费的。因此,Google的Android开发人员制作了自己的虚拟机,并使其免费。
虚拟机是必需的,因为虚拟机有助于调试,就像一个虚拟计算机一样,使我的应用程序可以在不同的设备上以相同的方式运行。
所有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,点击这里