JVM和DVM的区别
admin
2023-07-30 20:15:39
0

JVM(Java虚拟机)

JVM是在不同平台上运行java代码的虚拟机。它作为程序和运行java代码的平台之间的一个抽象层。因为有了JVM,Java代码的可移植性才成为可能。javac编译器将源代码文件(.java文件)转换为独立于机器/平台的中间java字节码格式。这个中间文件然后被提供给目标机器/平台,在那里它被翻译成机器代码。JVM支持多种主机架构,这就是为什么Java应用程序被称为WORA(Write Once Run Anywhere)的原因。

DVM(Dalvik虚拟机)

DVM是一个执行Android应用程序的虚拟机。由javac编译器生成的Java字节码(.class文件)被转换为Dalvik字节码,使应用程序的源文件可以在DVM上执行。由于安卓设备有一定的处理能力、内存和电池寿命,DVM的设计原则旨在优化自身,使其即使在低内存/低功率的设备上也能快速加载并顺利运行。这个虚拟机在同一设备上运行多个实例时非常高效。

注:谷歌在2014年为安卓应用引入了一个新的虚拟机,被称为安卓运行时(ART)。它的设计目的是提高应用程序的性能,减少设备的电池使用。DVM最后支持的版本是Android 4.4(Kitkat)。

JVM(Java虚拟机) DVM(Dalvik虚拟机)
基于堆栈的虚拟机,通过推送和弹出操作数进行算术和逻辑运算。操作的结果存储在堆栈内存中。 基于寄存器的虚拟机,使用位于CPU中的寄存器来执行算术和逻辑操作。
Java源代码被编译成Java字节码格式(.class文件),进一步翻译成机器代码。 源代码文件首先被编译成JVM那样的Java字节码格式。此外,DEX编译器(dx工具)将Java字节码转换为Dalvik字节码(classes.dex)文件,将用于创建.apk文件。
在堆栈数据结构中的数据加载和操作以及方法加载,需要向虚拟机提供更多信息。 指令大小较大,因为它需要对虚拟机的源和目标寄存器进行编码。
编译的字节码大小是紧凑的,因为操作数的位置隐含在操作数栈中。 编译的字节码大小较大,因为每条指令都需要所有隐式操作数。
设备的可执行文件是.jar文件。 设备的可执行文件是.apk文件。
一个单一的JVM实例被配置为共享进程和内存空间,以运行所有部署的应用程序。 该设备运行多个DVM实例,在共享内存空间中有一个单独的进程,以部署每个应用程序的代码。
支持多种操作系统,如Linux、Windows和Mac OS。 只支持安卓操作系统。

相关内容

热门资讯

Mobi、epub格式电子书如... 在wps里全局设置里有一个文件关联,打开,勾选电子书文件选项就可以了。
定时清理删除C:\Progra... C:\Program Files (x86)下面很多scoped_dir开头的文件夹 写个批处理 定...
scoped_dir32_70... 一台虚拟机C盘总是莫名奇妙的空间用完,导致很多软件没法再运行。经过仔细检查发现是C:\Program...
500 行 Python 代码... 语法分析器描述了一个句子的语法结构,用来帮助其他的应用进行推理。自然语言引入了很多意外的歧义,以我们...
小程序支付时提示:appid和... [Q]小程序支付时提示:appid和mch_id不匹配 [A]小程序和微信支付没有进行关联,访问“小...
pycparser 是一个用... `pycparser` 是一个用 Python 编写的 C 语言解析器。它可以用来解析 C 代码并构...
微信小程序使用slider实现... 众所周知哈,微信小程序里面的音频播放是没有进度条的,但最近有个项目呢,客户要求音频要有进度条控制,所...
65536是2的几次方 计算2... 65536是2的16次方:65536=2⁶ 65536是256的2次方:65536=256 6553...
Apache Doris 2.... 亲爱的社区小伙伴们,我们很高兴地向大家宣布,Apache Doris 2.0.0 版本已于...
项目管理和工程管理的区别 项目管理 项目管理,顾名思义就是专注于开发和完成项目的管理,以实现目标并满足成功标准和项目要求。 工...