浅谈android应用之DVM & ART

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接: https://blog.csdn.net/angelsmiling/article/details/102757686

1. 前言

之前有写过一篇文章浅谈android源码之dalvik,有兴趣深入学习的话可以看看我这篇文章。现在这篇文章不往深了讲,讲讲基本概念,对DVM以及ART有基本的认识就行。

2. DVM

DVM全称为Dalvik Virtual Machine。它是由Dan Bornstein编写的,名字源于他的祖先居住过的名为Dalvik的小渔村。DVM是Google专门为Android平台开发的虚拟机,它运行在Android运行时库中。

3. ART

ART全称为Android Runtime。是Android 4.4发布的,用来替换Dalvik虚拟,Android 4.4默认采用的还是DVM,系统会提供一个选项来开启ART。在Android 5.0时,默认采用ART,DVM从此退出历史舞台。

4. DVM,ART,JVM三者的区别

DVM和JVM的区别

1.基于的架构不同

DVM是基于寄存器的,它没有基于栈的虚拟机在复制数据时而使用的大量的出入栈指令,同时指令更紧凑、更简洁。但是由于显式指定了操作数,所以基于寄存器的指令会比基于栈的指令要大,但是由于指令数量的减少,总的代码数不会增加多少

2.执行的字节码不同

JVM执行顺序:.java文件–>.class文件–>.jar文件

DVM执行顺序:.java文件–>.class文件–>.dex文件

.apk文件中只包含了一个.dex文件,这个.dex文件将所有的.class里面所包含的信息全部整合在一起了,这样再加载就加快了速度

3.DVM允许在有限的内存中同时运行多个进程

4.DVM由Zygote创建和初始化

5.DVM有共享机制

不同应用之间在运行时可以共享相同的类,拥有更高的效率,而JVM机制不存在这种共享机制

6.DVM早期没有使用JIT编译器,Android 2.2之后开始使用JIT

ART和DVM的区别

1.ART采用了AOP技术,安装程序时,将字节码预先编译成机器码并存储在本地,这样应用程序可以不再次编译后才能启动程序(类似srollview一次性全加载完)。DVM则是没有这一步的操作,每次打开程序都要编译一次程序(类似listview,等到你进入到某一项才给你加载)

2.DVM为32位cpu设计,而ART支持64位且兼容了32位cpu

3.ART对回收机制做了改进

4.ART运行时空间划分与DVM不同

猜你喜欢

转载自blog.csdn.net/angelsmiling/article/details/102757686