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>

相关推荐
Lochor Lee6 分钟前
C++学习笔记——输入输出的格式
c++·笔记·学习
babe小鑫9 分钟前
2026数字营销专业人士学习数据分析的必要性
学习·数据挖掘·数据分析
吃好睡好便好21 分钟前
在Matlab中绘制二维等高线图
开发语言·人工智能·学习·算法·matlab
xian_wwq28 分钟前
【学习笔记】探讨大模型应用安全建设系列——顶层规划:如何推动公司级大模型安全建设-1
笔记·学习·安全·ai
Lucky_ldy1 小时前
C语言学习:自定义类型-结构体
c语言·开发语言·学习
2301_792674861 小时前
java学习(day34)
java·开发语言·学习
lizhihai_991 小时前
股市学习心得-量比的作用
大数据·人工智能·学习
山岚的运维笔记1 小时前
Bash 专业人员笔记 -- 第 11 章:`true`、`false` 和 `:` 命令
linux·运维·服务器·开发语言·笔记·学习·bash
Honker_yhw2 小时前
大数据管理与应用系列丛书《数据挖掘》(吕欣等著)读书笔记-偏相关分析
笔记·学习
Lucky_ldy2 小时前
C语言学习: 自定义类型—联合和枚举
c语言·学习·算法