区别一:dvm执行的是.dex格式文件 jvm执行的是.class文件 android程序编译完之后生产.class文件,然后,dex工具会把.class文件处理成.dex文件,然后把资源文件和.dex文件等打包成.apk文件。apk就是android package的意思。 jvm执行的是.class文件。
区别二:dvm是基于寄存器的虚拟机 而jvm执行是基于虚拟栈的虚拟机。寄存器存取速度比栈快的多,dvm可以根据硬件实现最大的优化,比较适合移动设备。
区别三:.class文件存在很多的冗余信息,dex工具会去除冗余信息,并把所有的.class文件整合到.dex文件中。减少了I/O操作,提高了类的查找速度
.dex把所有.class的 header头(包含JDK)写成了一个,所有的常量放在一个池里, .dex只维护了一个索引.
JVM: .java --> javac --> .class --> jar --> .jar
架构: 堆栈
DVM: .java --> javac --> .class --> dx.bat --> .dex
架构: 寄存器(cpu上一块高速的缓存)