DVM和JVM

本文探讨了Android平台上的Dalvik虚拟机(DVM)与Java虚拟机(JVM)的主要区别,包括它们执行的不同字节码(.dex vs .class),DVM基于寄存器而JVM基于栈的设计理念,以及.dex文件如何通过去除冗余信息和整合多个.class文件来提高效率。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

a)dvm执行的是.dex文件,而jvm执行的是.class。Android工程编译后的所有的.class字节码会被dex工具抽取到一个.dex文件中。
b)dvm是基于寄存器的虚拟机 而jvm执行是基于虚拟栈的虚拟机。寄存器存取速度比栈块的多,dvm可以根据硬件实现最大的优化,比较适合移动设备。
c).class文件存很多的冗余信息,dex工具会除去冗余信息,并把所有的.class文件整合到.dex文件中。减少了I/O操作,提高了类的查找速度。
### 关系及区别 在Android环境下的Dalvik虚拟机(DVMJava虚拟机(JVM)之间存在显著差异,尽管两者均属于Java虚拟机家族成员。JVM主要用于桌面服务器环境中执行Java程序,而DVM专为早期版本的Android平台设计,用于执行Android应用程序[^1]。 #### 架构层面的不同 JVM基于栈架构,在操作过程中频繁地从栈中读取写入数据,这增加了额外开销并降低了运行效率。相比之下,DVM采用了寄存器基础结构,减少了因数据传输带来的性能损耗,使得其更适合于资源受限的移动设备使用场景[^4]。 #### 文件格式支持上的差别 对于字节码文件的支持也有所不同。传统的JVM依赖`.class`文件作为输入源来加载类定义信息;然而,在Android系统里,为了适应更严格的存储空间限制以及提高启动速度等因素考虑,引入了一种新的二进制格式——DEX(Dalvik Executable),即由多个`.dex`组成的APK包内含有的可执行单元[^2]。 #### 应用隔离机制实现方式各异 值得注意的是,虽然每个Android应用都在独立进程中运行,并拥有各自对应的DVM实例来进行沙箱化处理,从而保障安全性稳定性,但这并不意味着所有方面都完全相同于标准意义上的多线程或多进程模型。具体来说: - **安全性**:由于各应用程序被分配到了不同的Linux用户ID下运作,即使某个特定的应用遭遇异常情况也不会影响其他正在使用的软件组件; - **资源利用率**:当某项服务不再活跃时能够迅速释放所占用的相关计算资源,进而达到节能降耗的目的[^3]。 ```python # 示例代码展示如何获取当前运行环境的信息 (仅作示意用途) import os def get_vm_info(): vm_type = "Unknown" if 'dalvik' in str(os.uname()): vm_type = "DVM" elif hasattr(sys, 'implementation') and sys.implementation.name == 'java': vm_type = "JVM" return f"The current virtual machine is {vm_type}" print(get_vm_info()) ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值