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>

相关推荐
半生过往1 小时前
前端工程师学习智能体开发(一)
前端·学习·状态模式
m4Rk_3 小时前
【论文阅读】Agent 记忆机制(67):MemPO——用记忆级信用分配训练 Agent 主动管理长程上下文
论文阅读·人工智能·学习·开源·github
下辈子不要当码农3 小时前
ARM学习(1)
学习·arm
東隅已逝,桑榆非晚4 小时前
vector(模拟实现)
c++·笔记·学习
鱼听禅4 小时前
C# 学习笔记-使用 类型化客户端搭建HTTP客户端服务
学习·http·c#·工厂方法模式
高亦真4 小时前
今天是学习嵌入式的第38天
linux·学习·算法
传奇开心果编程5 小时前
【Rust入门知识点学与练】第33课:异步编程入门(async/await)强化
开发语言·学习·rust
传奇开心果编程5 小时前
【Rust入门知识点学与练】第34课:所有权与借用
开发语言·学习·rust
AAA代码批发商5 小时前
DAY43 ARM 体系结构学习笔记|嵌入式入门,从硬件组件到流水线、内存与栈帧
arm开发·笔记·学习
彧azz5 小时前
初学Unity:编辑器
笔记·学习·unity·游戏引擎