CodeEggDailyInterview icon indicating copy to clipboard operation
CodeEggDailyInterview copied to clipboard

简单说说 dexopt 与 dex2oat 的区别

Open kukyxs opened this issue 5 years ago • 2 comments

kukyxs avatar Nov 20 '19 00:11 kukyxs

dexopt 是对 dex 文件 进行 verification 和 optimization 的操作,其对 dex 文件的优化结果变成了 odex 文件,这个文件和 dex 文件很像,只是使用了一些优化操作码(譬如优化调用虚拟指令等)。

dex2oat 是对 dex 文件的 AOT 提前编译操作,其需要一个 dex 文件,然后对其进行编译,结果是一个本地可执行的 ELF 文件,可以直接被本地处理器执行。

除此之外 Dalvik 虚拟机中有使用 JIT 编译器,也就是说其也能将程序运行的热点 java 字节码编译成本地 code 执行。所以其与 Art 虚拟机还是有区别的,Art 虚拟机的 dex2oat 是提前编译所有 dex 字节码,而 Dalvik 虚拟机只编译使用启发式检测中最频繁执行的热点字节码。

kukyxs avatar Nov 20 '19 01:11 kukyxs

dexopt 是Android 5.0之前的系统对dex文件的处理方式, dex2oat是5.0后的处理方式。 在7.0时增加了JIT/AOT混合编译的方式,提高安装速度,节省内存。

luckylicy avatar Nov 20 '19 01:11 luckylicy