Java虚拟机和Dalvik虚拟机有哪些区别和不同?

Dalvik是Google公司自己设计的用于Android平的虚拟机,它可以简单地完成进程隔离和线程管理,并且可以提高内存的使用效率。每一个Android应用程序在底层都会对应一个独立的Dalvik虚拟机实例,其代码在虚拟机的解析下得以执行。

很多人都认为Dalvik虚拟机是一个Java虚拟机,因为Android开发的编程语言恰恰是Java语言,但是这种说法并不准确。Dalvik虚拟机并不是按照Java虚拟机的规范来实现的,两者不兼容,而且也有很多不同之处。

Java 虚拟机和Dalvik虚拟机

从图中可以看出,Java虚拟机和Dalvik虚拟机主要有两大区别:一是它们编译后的文件不同;二是它们基于的架构不同。具体如下:

1.编译后的文件不同

Java 虚拟机运行的是.class字节码文件,而 Dalvik 虚拟机运行的则是其专有的.dex文件。在Java程序中Java类会被翻译成一个或者多个字节码文件(.class)然后打包到.jar文件,之后Java虚拟机会从相应的.class文件和.jar文件中获取相应的字节码。Android程序虽然也是使用Java语言进行编程,但是在翻译成.class文件后,还会通过工具将所有的.class文件转换成一个.dex文件,然后Dalvik虚拟机从其中读取指令和数据,最后的.odex是为了在运行过程中进一步提高性能而对.dex文件进行的进一步优化,能加快软件的加载速度和开启速度。

2.基于的架构不同

Java虚拟机是基于栈的架构,大家知道,栈是一个连续的内存空间,取出和存入的速度比较慢;而Dalvik是基于寄存器的架构,寄存器是CPU上的一块缓存,寄存器的存取速度要比从内存中存取的速度快很多,这样就可以根据硬件最大限度地优化设备,更适合移动设备的使用。

需要说明的是,Android系统下的Dalvik虚拟机默认给每一个应用程序最多分配16 MB内存,如果Android加载的资源超过这个值,就会报出OutOfMemoryError异常,因此一定要注意这个问题。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值