DVM 和 JVM 有什么区别?

2022-08-31 12:52:55

Java虚拟机和Dalvik虚拟机有什么区别?


答案 1

DVM是基于寄存器的,旨在在低内存上运行,使用自己的字节码并运行。Dex 文件

JVM是基于堆栈的,它使用java字节码并运行.class具有JIT的文件。

Java 源代码由 Java 编译器编译为.class文件。然后,dx(dexer)工具(Android SDK的一部分)将.class文件处理为包含Dalvik字节码的名为DEX的文件格式。dx 工具消除了类中存在的所有冗余信息。在DEX中,应用程序的所有类都打包到一个文件中。DVM 的设计使设备可以有效地运行 VM 的多个实例。

基于堆栈的计算机必须使用指令在堆栈上加载数据并操作该数据,因此,需要比寄存器计算机更多的指令来实现相同的高级代码,但是寄存器计算机中的指令必须对源寄存器和目标寄存器进行编码,因此往往更大。


答案 2

从概念上讲,DVM 和 JVM 与应用程序级别几乎没有区别。在体系结构上,基于寄存器的 DVM 和基于堆栈的 JVM 之间存在重大差异。

两者都使用 VM 代码模型。但是,DVM 使用基于寄存器的操作码,这些操作码与大多数目标平台已执行的基于寄存器的字节码指令相当。这包括 ARM 和 MIPS 提供的架构,以及 Intel、AMD 和 VIA Technologies 提供的 x86 兼容架构。

谷歌开发了Android并选择DVM有几个原因。首先,大多数JVM都存在许可问题。接下来,DVM 在基于寄存器的计算机上的内存使用和性能方面应该更有效。在运行 DVM 的多个实例时,DVM 也应该更有效率。应用程序被赋予了自己的实例。因此,多个活动应用程序需要多个 DVM 实例。与大多数Java实现一样,DVM具有自动垃圾回收器。

更多关于它


推荐