ThinkSSL🔒 一键申购 5分钟快速签发 30天无理由退款 购买更放心 广告
二、dexopt 与dex2oat 从应用层开发来说有个原理上的大致理解也是必须掌握的,具体区别可用如下图概述(图片来自网络)。 ![](https://img.kancloud.cn/dd/23/dd23742388d8f52f765a3b6df06604cd_800x729.jpg) 通过上图可以很明显的看出dexopt 与dex2oat 的区别,前者针对Dalvik 虚拟机,后者针对Art 虚拟机。 dexopt 是对dex 文件进行verification 和optimization 的操作,其对dex文件的优化结果变成了odex 文件,这个文件和dex 文件很像,只是使用了一些优化操作码(譬如优化调用虚拟指令等)。 dex2oat 是对dex 文件的AOT 提前编译操作,其需要一个dex 文件,然后对其进行编译,结果是一个本地可执行的ELF 文件,可以直接被本地处理器执行。 除此之外在上图还可以看到Dalvik 虚拟机中有使用JIT 编译器,也就是说其也能将程序运行的热点java 字节码编译成本地code 执行,所以其与Art 虚拟机还是有区别的。Art 虚拟机的dex2oat 是提前编译所有dex 字节码,而Dalvik 虚拟机只编译使用启发式检测中最频繁执行的热点字节码。