Dalvik虚拟机与JVM的区别

大家都知道Java的跨平台性,主要体现在Java代码由虚拟机先编译再运行。

Android运行Java代码是通过一个名为Dalvik的虚拟机来实现的,

那么问题来了,为什么Android系统为什么不使用JVM虚拟机呢?


这要从一个故事说起:


其实Android最早是使用的Linux版的JVM虚拟机,虽然JAVA是开源免费但是不代表JVM是开源免费.

所以当时Java的东家Sun公司不乐意了

2006年6月Sun公司便向谷歌索要2000万美元以及10%的Android相关收益并许诺其3年的Java授权

谷歌肯定也不乐意啊觉得Sun公司是脑子进水了

于是07年11月份谷歌便开始了自主开发Android平台虚拟机Davik来避开Sun的诉讼。

10年1月Oracle收购Sun公司获得Java的相关专利和版权,但这并没有结束对谷歌的诉讼

10年8月Oracle诉讼谷歌侵犯Java专利和知识产权,声明是谷歌抄袭了JVM的8行代码,然后谷歌胜诉。


Dalvik 与 JVM的比较


       JVM                                  Dalvik

编译后文件的格式       .java -> .class ->.jar       .java -> .class -> .dex -> .apk

架构       基于栈的架构                     基于寄存器的架构


1.栈是内存当中的数据结构而寄存器是CPU当中的一个储存单元,显然CPU读取寄存器中的数据是快于内存的。那么DVM当中的所有东西都是保存在寄存器的么? 答案:不是,寄存器的容量仅仅保存的是内存指针(内存地址)而已。


2.Java代码需要运行首先需要编译为 .class 文件 那么Dalvik编译为.class文件之后还需要全部编译成一个.dex文件再打包到apk当中,所以我们在apk当中是找不到.class文件的。


将所有.class 编译为一个.dex文件有什么优势呢?






        















大家可以联想一下我们复制一堆总共加起来是10G的文件快 还是一个10G的.zip快呢?

显然是一个文件复制的快,那么这是为什么呢? 从上图我们可以知道每一个文件无论是多大,它都会有一个Header,而这个Header在操作文件的时候系统都会进行处理检测的,所以会多花费很多时间的。

所以谷歌这样设计Dalvik是一个极大的优化。



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值