最近帮分公司在招聘Android程序员,我则陪同分公司的资深Java同事一起面。由于Java老哥不懂Android,所以经常会问一些java的知识,其中JVM的问题很多,每次面试者都很无语。那么今天我们就来说818咱们Android的DVM和JVM的区别。
- 虚拟机运行的字节码不同。
JVM运行的是Java字节码:
.java文件经过编译,生成Java字节码保存在class文件中,JVM通过解码.class文件来运行java程序。
DVM运行的是Dalvik字节码:
.java文件先经过编译,生成java字节码保存在class文件中。然后由SDK中
一个叫dx的工具负责转换为Dalvik字节码。
Dalvik字节码被打包入DEX(Dalvik EXcutable)包中,DVM通过解码DEX包来运行android程序。
- JVM与DVM的架构不同。
JVM基于栈结构,由于手机的硬件资源有限,无法支撑JVM的频繁地从栈上读写的开销。
DVM基于寄存器,其数据的访问通过寄存器间直接传递,效率远高于栈。
Dalvik的Dex格式在未压缩的情况下都比压缩了的JAR文件还小。
除了DVM,目前更流行的是ART虚拟机,接下来将对ART进行介绍....
网友评论