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/ 存放应用程序的数据

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容