Dalvik和Art,JIT ,AOT, oat, dex, odex

aot,oat,art...是不是有的时候傻傻分不清楚,该文章主要解释dalvik, Art,JIT ,AOT, oat, dex, odex这些概念,已便于理解Android 应用编译和运行的过程及安装过程。 

执行环境dalvik, Art

dalvik这个大家肯定很熟悉 Dalvik是Google公司设计用于Android平台的Java虚拟机 

Art是(Android runtime) 在Android系统4.4提出 在5.0之后完全弃用dalvik 全部采用art为执行环境

在Dalvik下,应用每次运行的时候,字节码都需要通过即时编译器(JIT)转换为机器码,这会拖慢应用的运行效率,而在ART 环境中,应用在第一次安装的时候,字节码就会预先编译成机器码(这种机制称为AOT) 这样的话,应用执行变得更加快速。

编译模式 JIT,AOT

上述提到的两种编译模式jit 和aot,可以理解为是一种编译策略

 JIT (just in time)  运行时编译 

AOT (Ahead-Of-Time)   运行前编译 Art的主要特征就是AOT

文件格式 oat dex和odex

dexDalvik Executable)格式是专门为Dalvik设计的一种压缩格式,

        (javac)          (dx工具)

.java------>.class------->.dex

.java文件经过javac编译器生成.class字节码 再经过。dx工具生成.dex

odex(optimized dex)即优化的dex

对于在dalvik环境中 使用dexopt来对dex字节码进行优化 生成odex文件 最终存在手机的data/dalvik-cache目录下

对于art环境,使用dex2oat工具来对dex字节码生成oat文件

oat文件是art的核心,oat文件包含oatdata和oatexec

前者包含dex文件内容,后者包含生成的本地机器指令,进而可以直接运行,同样保存在手机的data/dalvik-cache目录下

PMS(PackgetManagerService)--->installd(守护进程)------>dex2oat(/system/bin/dex2oat)

注意存放在data/dalvik-cache目录下的后缀名都仍为.dex 前者其实表示一个优化过的.dex文件 后者为.oat文件

apk安装过程

大家都知道 apk其实就是zip包 apk安装过程其实就是解压过程

用户应用安装涉及以下几个目录

data/app 安装目录 安装时会把apk文件copy到这里

data/dalvik-cache 如上述描述中的存放.dex(.odex 无论davilk的dex 还是art的oat格式)

data/data/pkg/ 存放应用程序的数据

你可能感兴趣的:(Dalvik和Art,JIT ,AOT, oat, dex, odex)