【问题标题】:What is the difference between DVM and JVM?DVM和JVM有什么区别?
【发布时间】:2011-03-27 16:02:42
【问题描述】:

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

【问题讨论】:

  • 为什么一个答案都不被接受?
  • 我们的智能手机是 dvm 吗?还是模拟器?

标签: java android jvm dvm


【解决方案1】:

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

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

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

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

【讨论】:

  • 我们没有限制可用注册的数量吗?
【解决方案2】:

从概念上讲,几乎没有 与应用程序级别的区别 在 DVM 和 JVM 之间。 在建筑上,有一个主要的 基于寄存器的区别 DVM 和基于堆栈的 JVM。

两者都使用 VM 代码模型。然而 DVM 使用基于寄存器的操作码 可与基于寄存器的 大多数的字节码指令 目标平台已经执行。这 包括诸如那些架构 可从 ARM 和 MIPS 以及 x86 兼容架构 英特尔、AMD 和威盛科技。

Google 开发 Android 并选择了 DVM 有几个原因。首先,有 大多数 JVM 的许可问题。下一个, DVM 应该更有效 内存使用和性能方面 在基于寄存器的机器上。 DVM 是 也应该更有效率 运行多个实例时 DVM。应用程序有自己的 实例。因此,多主动 应用程序需要多个 DVM 实例。像大多数 Java 实现中,DVM有一个 自动垃圾收集器。

More about it

【讨论】:

    【解决方案3】:

    jvm 架构是基于堆栈的,而 dvm 架构是基于寄存器的。对于相同的任务,基于堆栈的机器比基于寄存器的机器需要更多的指令(​​即更大的指令集)。另一方面,基于寄存器的机器中的每条指令都更大。

    【讨论】:

      【解决方案4】:

      当Java虚拟机开始运行程序时,它需要内存来存储 许多东西,包括字节码和它提取的其他信息 从加载的类文件、程序实例化的对象、参数到 方法、返回值、局部变量和计算的中间结果。

      Java 虚拟机组织执行程序所需的内存 到几个运行时数据区。

      通常,基于堆栈的机器必须使用指令将数据加载到堆栈上 并操纵该数据,因此需要比 注册机器以实现相同的高级代码,但指令 在寄存器机器中必须对源寄存器和目标寄存器进行编码 因此,往往会更大。

      这种差异主要对使用操作码的 VM 解释器很重要 调度往往很昂贵,并且其他因素与 JIT 编译有关。

      Dalvik 针对低内存要求进行了优化,具有一些特定的特性 区别于其他标准虚拟机>>>>>

      虚拟机被精简以使用更少的空间--->> Dalvik 目前没有即时编译器 (JIT),而是 Android 2.0 包括一个实验源(默认禁用)。 常量池已修改为仅使用 32 位索引以简化 口译员。它使用自己的字节码,而不是 Java 字节码***

      【讨论】:

      • 从 Android 2.2 开始使用 JIT,从 Android 5.0(将 DVM 替换为 ART)使用 AOT,然后从 Android 7.0 开始使用 AOT 和 JIT。
      【解决方案5】:

      Dalvik VM 不能执行 Java 字节码(.class) 必须是(.dex)

      Oracle JVM 具有基于堆栈的架构,而 Dalvik 具有基于寄存器的架构。

      JVM 支持多个操作系统。 (它是开源的)但是 Android 操作系统支持 DVM(在 comming android 5.o android 使用 DVM 之前)

      【讨论】:

        【解决方案6】:

        这是一个表格比较(来源Mr. Atul):

        【讨论】:

        【解决方案7】:

        Jvm 将基于字节码工作,而 dvm 将基于优化的字节码工作,它针对移动平台进行了优化,因为移动设备的内存和进程低,这就是它使用 linux 内核的原因。

        【讨论】:

          【解决方案8】:

          在这里,我们可以了解JVM(Java虚拟机)和DVM(Dalvik虚拟机)之间的基本区别。 从图中可以看出,DVM 只能运行 .dex 文件。 Dex 编译器获取所有属于应用程序的类的所有 .class(可由 JVM 执行)文件,并将它们全部转换为单个 .dex 文件。稍后 .dex 文件由 DVM 执行。此外,.class 文件由 .java->.class 中的 Javac(java 编译器)生成。

          【讨论】:

            猜你喜欢
            • 2015-11-04
            • 1970-01-01
            • 2019-08-19
            • 2011-02-18
            • 2020-07-24
            • 1970-01-01
            • 1970-01-01
            • 2022-11-04
            相关资源
            最近更新 更多