JVM与DVM的区别:
1.基于的架构不同:
JVM是基于栈的,读写数据需要较多的指令。
DVM是基于寄存器的,省去了数据复制时的栈的出入栈操作,提高了性能。但是基于寄存器的指令要比基于栈的指令要大。
2.执行的字节码不同:
JVM:.java->.class->.jar,.jar只是对class进行了打包,并没有将class信息合并。
DVM:.java->.class->.dex,.dex会将所有的class整合在一起,减少了IO操作,查询类的速度更快,并且在整合过程中去掉了class的冗余信息。
3.每个DVM都对应一个应用,DVM是由Zygote进程创建、初始化的。
4.DVM拥有 预加载-共享 机制,也就是不同应用之间可以共享同一个类。但是JVM不同,JVM每个应用都是独立的。
DVM GC算法:标记-清除算法
DVM与ART的区别:(Android 5.0及以后默认使用ART)
1.
DVM每次启动应用,都会去JIT,效率很低。
ART采用AOT(ahead of time compilation,预编译),将字节码编译成机器码存储在本地,这样程序运行的时候效率就非常高。
AOT的缺点有两个:1.在安装的时候会非常耗时;2.class编译生成的机器码会很多,占用空间比较大。
对于安装非常耗时,在Android 7.0,基于ART引入JIT机制,弥补了这一缺陷。
2.DVM是为32位CPU设计的,ART支持64位兼容32位,这也是DVM淘汰的理由之一。