【】名词解释
JVM是Java Virtual Machine的缩写,叫做 java虚拟机。
DVM是Dalvik Virtual Machine的缩写,叫做 Dalvik虚拟机。
【】二者的关系
DVM是针对JVM而言的,JVM是Oricle公司的产品,担心版权问题,既然java是开源的,索性就研究了JVM,写出了DVM。
DVM是针对移动设备而生的虚拟机。
【】二者的区别
一、基于的架构不一样
java是基于栈的架构,栈是内存上面一段连续的存储空间。
Android是基于寄存器的架构,寄存器是cpu上的一块存储空间。
所以cpu直接访问自己上面的一块空间的数据的效率肯定要大于访问内存上面的数据。
二、执行的字节码文件不一样
JVM: .java-->.class-->.jar
DVM: .java-->.class-->.dex
.jar文件里面包含多个.class文件,每个.class文件里面包含了该类的头信息(如编译版本)、常量池、类信息、域、方法、属性等等,当JVM加载该.jar文件的时候,会加载里面的所有的.class文件,这样会很慢,而移动设备的内存本来就很小,不可能像JVM这样加载,所以它使用的不是.jar文件,而是.apk文件,该文件里面只包含了一个.dex文件,这个.dex文件里面将所有的.class里面所包含的信息全部整合在一起了,这样再加载就很快了。.class文件存在很多的冗余信息,dex工具会去除冗余信息,并把所有的.class文件整合到.dex文件中。减少了I/O操作。
三、运行环境的区别
DVM: 每个应用启动都运行一个单独的DVM,每个DVM单独占用一个Linux进程。
JVM: 只能运行一个实例,即所有的应用都运行在同一个JVM中。
【】声明:
本文是在参考其他人资料的基础上做的一个归纳,多部分是复制过来的。也加入了一部分自己的理解。如有理解不到位的,希望读者可以指正。