1.虚拟机运行的字节码不同。
JVM运行的是Java字节码:
.java文件经过编译,生成Java字节码保存在.class文件中,JVM通过解码.class文件来运行java程序。
DVM运行的是Dalvik字节码:
.java文件先经过编译,生成java字节码保存在.class文件中。
然后由SDK中一个dx的工具负责转换为Dalvik字节码。
Dalvik字节码被打包如DEX(Dalvik Excutable)包中,DVM通过解码DEX包来运行android程序。
2.JVM与DVM的架构不同。
Java基于栈结构,由于手机的硬件资源有限,无法支撑JVM的频繁地从栈上读写的开销。
DVM基于寄存器,其数据的访问通过寄存器间直接传递,效率远高于栈。
Dalvik的Dex格式在未压缩的情况下都比压缩了的jar文件还小。