dexopt学习待整理

问:简单说说 dexopt 与 dex2oat 的区别?

答:这道题目如果想深入理解就需要去看源码了,不过对于应用层开发来说有个原理上的大致理解也是必须掌握的,具体区别可用如下图概述(图片来自网络)。

通过上图可以很明显的看出 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 虚拟机只编译使用启发式检测中最频繁执行的热点字节码。

确认dex2oat耗时

05-18 10:42:26.804572 802 802 I PackageManager.DexOptimizer: Running dexopt (dex2oat) on: /data/app/com.facebook.katana-1/base.apk pkg=com.facebook.katana isa=arm vmSafeMode=false debuggable=false oatDir = /data/app/com.facebook.katana-1/oat

这行Log反映了PMS开始发起dex2oat

855 855 I dex2oat : Starting dex2oat.

表示dex2oat开始进行

dex2oat : Compilation of void com.facebook.graphql.model.GraphQLNode.(android.os.Parcel) took 202.707ms

表示dex2oat过程中优化某一个方法,如果超过100ms就会打印出来

855 855 I dex2oat : dex2oat took 248.681s (threads: 4) arena alloc=71MB java alloc=111MB native alloc=230MB free=25MB swap=176MB

表示优化完成,总耗时248.681s,启动了4个线程

来自 <Mediatek Account | Login>

相关推荐
好奇龙猫5 分钟前
日语学习-日语知识点小记-构建基础-JLPT-N3阶段-二阶段(4):文法運用
学习
mtactor10 分钟前
投资理财学习笔记
笔记·学习·金融
浮游本尊1 小时前
React 18.x 学习计划 - 第四天:React Hooks深入
前端·学习·react.js
立志成为大牛的小牛2 小时前
数据结构——二十六、邻接表(王道408)
开发语言·数据结构·c++·学习·程序人生
Olrookie3 小时前
若依前后端分离版学习笔记(二十)——实现滑块验证码(vue3)
java·前端·笔记·后端·学习·vue·ruoyi
请你喝好果汁6413 小时前
Conda_bashrc 初始化机制学习笔记
笔记·学习·conda
maxruan4 小时前
PyTorch学习
人工智能·pytorch·python·学习
MYX_3094 小时前
第三章 线型神经网络
深度学习·神经网络·学习·算法
_李小白4 小时前
【Android Gradle学习笔记】第八天:NDK的使用
android·笔记·学习
Jose_lz6 小时前
C#开发学习杂笔(更新中)
开发语言·学习·c#