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>

相关推荐
万岳科技系统开发12 分钟前
私域直播小程序源码的整体架构设计与实现思路
学习·小程序
richxu2025100123 分钟前
嵌入式学习之路>单片机核心原理篇>(11) 存储器(Flash & SRam)
单片机·嵌入式硬件·学习
sszdlbw34 分钟前
后端springboot框架入门学习--第二篇
java·spring boot·学习
9527(●—●)44 分钟前
windows系统python开发pip命令使用(菜鸟学习)
开发语言·windows·python·学习·pip
好奇龙猫2 小时前
日语学习-日语知识点小记-构建基础-JLPT-N3阶段-二阶段(30):第8科
学习
汤姆yu2 小时前
基于微信小程序的驾校预约与学习系统
学习·小程序·驾校预约
车载测试工程师2 小时前
CAPL学习-SOME/IP交互层-TCP处理类函数
学习·tcp/ip·以太网·capl·canoe
YJlio2 小时前
ZoomIt 学习笔记(11.7):安装与基础使用——演示/授课/录屏的神级放大镜
笔记·学习·intellij-idea
kkkkkkkkk_12012 小时前
【强化学习】07周博磊强化学习纲要学习笔记——第四课上
学习·强化学习
speop3 小时前
【datawhale组队学习】TASK01|课程导论:站在认知范式的临界点
人工智能·学习