要搞清楚区别,首先来认识下这2者分别是撒
什么是Dalvik?
- Dalvik是用于Android平台的Java虚拟机
- Dalvik虚拟机是Google等厂商合作开发的Android移动设备平台的核心组成部分之一
- 它可以支持已转换为.dex(即Dalvik Executable)格式的Java应用程序的运行
- .dex格式是专为Dalvik应用设计的一种压缩格式,适合内存和处理器速度有限的系统
- Dalvik经过优化,允许在有限的内存中同时运行多个虚拟机的实例,并且每一个Dalvik应用作为独立的Linux进程执行
- 独立的进程可以防止在虚拟机崩溃的时候所有程序都被关闭
Dalvik特点
- Dalvik是依靠一个Just-In-Time(JIT编译)编译器去解释字节码
- Dalvik虚拟机下运行Java时,要将字节码通过即时编译器(just in time ,JIT)转换为机器码(机器码才是能真正运行的),这会拖慢应用的运行效率
- 应用安装时,执行dexopt指令,将dex文件优化为odex文件
- 应用运行时,会将二进制翻译成机器码流程
鉴于Dalvik这个缺点,Google开发了新的虚拟机叫ART(Android Runtime)
ART(ART代表Android Runtime,Android 4.4引入)
- 应用在第一次安装的时候,字节码就会预先编译成机器码,使其成为真正的本地应用,这个过程叫做预编译(AOT,Ahead-Of-Time)
- 在移除解释代码这一过程后,应用程序执行将更有效率,启动更快
ART特点
- AOT编译
- 应用安装时执行dex2oat指令,将dex文件翻译为oat文件
- 应用运行时,无二进制翻译为机器码流程
ART分为2种模式, 即解释模式和AOT机器码模式
- 解释模式类似于JavaScript, 就是取出Dex代码并逐条解释,运行仍然会慢
- 机器码模式就是在安装app时就编译好Dex对应的机器码,运行很快, 这是Android5.0及后续版本的默认方式。
总结
ART应用启动快,运行快,但是耗费更多存储空间,安装时间长,总的来说ART的功效就是”空间换时间”
网友评论