美文网首页
ART、Dalvik、JIT、AOT等相关概念

ART、Dalvik、JIT、AOT等相关概念

作者: 一个追寻者的故事 | 来源:发表于2020-05-11 14:58 被阅读0次
    一、ART、Dalvik、JIT、AOT

    Dalvik、ART(Android Runtime):Android 虚拟机

    ART 引入了 AOT(预先编译)机制,可以提高应用性能。在安装时,ART使用设备自带的 dex2oat 工具来编译应用,此工具使用dex作为输入,并为目标设备生成经过编译的应用可执行文件(.oat),该文件 是ELF 文件格式。

    ART 也包含 一个具备代码分析功能的 即时(JIT)编译器,该编译器可以在Android 应用运行时持续提高其性能。JIT编译器是对 AOT编译器进行了补充,可提升运行时性能,节省存储空间,加快应用和系统更新速度。

    所以 ART 中 AOT 和 JIT 是同时存在的。 JIT中也提到了,这是一个持续改进的过程。 AOT 和 JIT 都是持续进行优化的。

    JIT架构图

    果同时存在 JIT 和 AOT 代码(例如,由于反复进行逆优化),经过 JIT 编译的代码将是首选代码。

    二、dexopt、dex2oat、.odex
    来自网络

    dexopt 对dex文件做一些优化。它做了一些事情,比如用一个优化版本替换一个虚拟调用指令,该优化版本包括被调用方法的vtable索引,这样就不必在执行期间执行方法查找。
    dexopt的结果是一个 odex(优化的dex)文件。这与原始dex文件非常相似,除了它使用一些优化的操作码,如优化的调用虚拟指令。

    dex2oat 需要一个dex文件并编译它。结果本质上是一个elf文件,然后本机执行。因此,代替由虚拟机解释的字节码,它现在具有可以由处理器本地执行的本地代码,这称为AOT(提前)编译。

    三、.art .oat .vdex

    dex文件经过dex2oat编译,会生成.art、.oat两个文件,oat是一个android定制的elf文件,原始dex也保存在其中。8.0后,dex单独保存到.vdex文件中。art文件类似于一个内存映像,缓存常用的ArtField、ArtMethod、DexCache等内容,加载后可直接使用,避免解析耗时。

    参考:
    https://source.android.google.cn/devices/tech/dalvik?hl=zh_cn
    https://source.android.google.cn/devices/tech/dalvik/jit-compiler?hl=zh_cn
    http://www.voidcn.com/article/p-mtcwktnt-bsu.html
    https://www.jianshu.com/p/065e358b9599

    相关文章

      网友评论

          本文标题:ART、Dalvik、JIT、AOT等相关概念

          本文链接:https://www.haomeiwen.com/subject/hpyunhtx.html