最新消息:欢迎访问Android开发中文站!商务联系微信:loading_in

趣味分析JVM与DVM的差别

新手入门 AndroidChina 3104浏览 0评论

前序:

      要是没有发生这么一件事,也不会有DVM的。之前Google一直用的都是JVM,本来也没啥事情,可JVM是Sun公司开发的,你用别人的东西又不交银子不打招呼,也难怪人家不乐意,所以啊,这Sun公司呢 就一直跟Google官司不断,就告别人侵权,要求赔偿。赔偿就赔偿嘛,你别乱开价啊,虽然杂家有银子,但也得合理对不,三五八块的还是没问题的对嘛!你要求别人给你2000w美金还限制人家只能使用2年,关键你还要别人道歉,典型的抢钱又踩脸,Google又不是SB,要是实力悬殊就认了,但是杂家还是不怂的,肯定不愿意啊,所以两家就一直争争吵吵。

但是Google心里郁闷啊,就下定决心对自己,说,好,你不让我用,我自己开发一个。所以DVM就产生了。但是凭空开发一个新玩意出来哪有这么简单,肯定要“借鉴”人家的嘛,很正常对不对!在国内这种“借鉴”多着去了,也都没啥事情,为毛你们就不能安安静静的搞点技术呢。

这时候轮到Sun公司心里不痛快的,哪有这么便宜的事,还是要打官司。然后,Sun公司被Oracle公司收购,Java商标从此正式归Oracle所有。卧 槽,这Oracle也是叼的不行,居然拿之前的官司继续跟Google纠缠,所谓的理由是DVM里有9行代码抄袭,小歌都郁闷了,尼 玛,几百万行的代码,怎么发现的,没事干还是纯粹找茬,然后继续申诉。至于结果,好像是Google赢了。不扯了,进入正文。

正文:

JVM:(Dalvik Virtual Machine)  Java虚拟机

DVM:(Dalvik Virtual Machine)  Dalvik虚拟机

JVM    .Java—–>.class—–>.jar

运行在内存的 栈(栈是内存当中特殊的数据结构)

DVM    .java—–>.class——>.dex—–(加上其它资源文件)—->apk

运行在CPU的 寄存器

不废话,先看图===>>>

2306667-06b5496246547437

区别还是很明显的:

JVM编译后生成的是.class文件 最后.jar包

而DVM,多了一步.dex文件,最后打包apk。

所以JVM执行的是.class文件,而DVM执行的是.dex文件。

除此之外呢

JVM:里含有多个.class文件,每个.class文件都包含文件头,这样IO操作效率低。

但是DVM中,看不到.class文件了,一个都没看到,这是因为dex工具,去掉了app里所有.class文件的冗余信息,再整合到.dex文件中,减少了IO的操作,提高了查找速度。同时你会发现就一个.dex文件,是比较大的。

文/ITtrap(简书作者)
原文链接:http://www.jianshu.com/p/6a58f4472066
著作权归作者所有,转载请联系作者获得授权,并标注“简书作者”。

转载请注明:Android开发中文站 » 趣味分析JVM与DVM的差别

您必须 登录 才能发表评论!