一、    Android ART简介

  1. Android DEX/ODEX/OAT文件

.class文件:JVM虚拟机(Java VM)执行的字节码文件;

.dex文件:DVM虚拟机(Dalvik VM)执行的字节码文件;

.odex文件:.dex文件经过优化生成的字节码文件;

  • oat文件:.dex文件经过dex2oat翻译生成的机器码。

1)  .class文件与.dex文件的主要区别在于:.class文件只包含一个类,而.dex文件可以包含多个类。

我们编译生成的classes.dex文件还包含第三方jar包等。

2)  (Android KK为例)USER Binary与ENG Binary的生成.odex文件区别:

USER版本的system分区:

在USER Binary中,.odex文件是在我们编译版本的时候生成的(并不是全部的apk都在编译时生成)。编译时将.dex优化生成.odex文件,我们可以看到生成.odex文件的apk中是没有.dex文件的。

下图是将LogsProvider.apk解压后的结果:

我们将Kies.apk解压后可以看到,还是包含.dex文件的(它对应的.odex文件会在烧完USER binary后第一次开机时生成在/data/dalvik-cache中,为什么不在编译时直接生成,以节省开机时间?):

ENG版本的system分区以及/data/dalvik-cache:(odex文件在ENG binary烧录完第一次开机时生成在/data/dalvik-cache)

3)  (Android L)USER Binary与ENG Binary的生成OAT文件区别:

跟Android KK类似,USER binary在我们编译时就会将apk中的dex翻译成机器码。

以Telecom.apk为例,在Telecom/arm目录下有两个xz压缩文件 ,其中Telecom.odex.xz就是OAT机器码的压缩文件,Telecom.odex.art.xz文件目前不清楚细节。

所以,USER binary在烧完第一次开机时,只需解压缩xz文件到/data/dalvik-cache中:

ENG binary在烧完第一次开机时,会将apk中的dex文件翻译成OAT文件放到/data/dalvik-cache中:

这也是为什么Android L ENG binary比USER binary第一次启动时间长很多的原因。

2. Android Dalvik

Dalvik虚拟机是Goole设计用于Android平台的Java虚拟机,Dalvik虚拟机通过解释执行dex文件,每个应用程序都对应与一个单独的Dalvik虚拟机实例。Android L之前使用的虚拟机。

3. Android ART

ART(Android Runtime)是Android 4.4以后新增加的一种运行时,主要是为了提升Android系统的流畅性。Android 4.4默认采用Dalvik,可以更改为ART,从Android L(Android 5.0)默认采用ART。

4. ART相比Dalvik的优缺点

优点:我们知道Dalvik通过解释执行dex文件,而ART则直接执行机器码,ART的执行效率比Dalvik要高很多,提升了系统的流畅性(目前感觉性能提升不是很大);

缺点:ART执行的是机器码,通过前面的分析我们知道机器码大多在烧完binary第一次开机时,翻译dex文件生成,与Dalvik相比显然这会增加启动时间;另外ART执行的OAT文件(机器码)远比Dalvik虚拟机执行的dex文件要大,会增加系统system分区以及data分区占用的空间。

最新文章

  1. angular view之间的数据传递
  2. Linux学习笔记(16)-多线程
  3. Visual Studio 14 初试,vNext
  4. 00.PHP学习建议
  5. Mac系统下使用VirtualBox虚拟机安装win7--第五步 共享文件夹设置
  6. 3D数学 ---- 矩阵和线性变换[转载]
  7. 搭建和使用Docker私有仓库
  8. 【JSP】JSP动态显示时间
  9. 为虚拟机搭建MacOSX系统
  10. ubuntu 12.04安装redis2.6.16
  11. PHP自动添加http://头 转换网址为链接
  12. Linux GCC
  13. Java中泛型数组的使用
  14. 部署:持续集成(CI)与持续交付(CD)——《微服务设计》读书笔记
  15. NET快速信息化系统开发框架 V3.2 ->WinForm部分全部重构为Dev风格界面
  16. 浅析MySQL InnoDB的隔离级别
  17. Guava 的EventBus示例代码(简单笔记,后期补充)
  18. fzu 2154 YesOrNo
  19. opencv3.2.0形态学滤波之腐蚀
  20. BZOJ 2527 Meteors | 整体二分

热门文章

  1. TI-Davinci开发系列之二使用CCS5.2TI Simulator模拟环境调试DSP程序
  2. 大陆用户如何下载Google Play中的apk文件
  3. java+springboot+bootstrap-fileInput 文件上传前后台完整示例
  4. lcx源代码以及免杀的研究
  5. Mysql show Status参数详解
  6. android开发的学习路线
  7. PureMVC(JS版)源码解析(二):Notification类
  8. NDK开发之ndk-build命令详解
  9. bootstrap02导航菜单
  10. php读取操作大文件