虚拟机hybrid编译

在这里插入图片描述

 

是否开启 jit 编译

开启
adb root
adb shell stop
adb shell setprop dalvik.vm.extra-opts -verbose:jit
adb shell start

关闭:
adb root
adb shell stop
adb shell setprop dalvik.vm.usejit false
adb shell start

强制编译

全编译某个apk:
adb shell cmd package compile -m speed -f pkgName

基于配置文件编译:
adb shell cmd package compile -m speed-profile -f pkgName

编译所有apk:
adb shell cmd package compile -m speed -f -a

oat文件

包含有:
dex文件
dex文件编译出的native code
oat的header
oat的data

用途:
art虚拟机运行的文件

生成:
由dex2oat,将dex文件生成

profile文件

路径:
/data/misc/profiles/cur/0/com.***.home/primary.prof

作用:
记录运行频繁的mthod,提供给dex2oat编译。
是7.0之后出现的

查看命令:
直接pull出来,全是乱码
可以命令:
profman --profile-file=primary.prof --dump-only

结构:
使用上面命令看,可看到结构。
methods 和 classes后的数据,表示他们在dex文件中的index。
使用profile执行 dex2oat时,只会编译profile中记录的methods和classes
//profile文件内容
=== Dex files  ===
=== profile ===
ProfileInfo:
xxxx.apk [index=0] [checksum=3e072d12]
    hot methods: 7332[], ....
    startup methods:
    post startup methods:7184, 7186,.....
    classes:
        xxx.apk!classes2.dex [index=1] [checksum=adce87a]
    hot methods: 1108[], 1110[], 1327[], 1334[], 1343[], 1344[],
    startup methods:
    post startup methods: 1108, 1110,...

app-image文件

路径:
/data/dalvik-cache/arm

文件:
preload@app@Jingdong@Jingdong.apk@classes.art
preload@app@Jingdong@Jingdong.apk@classes.dex
preload@app@Jingdong@Jingdong.apk@classes.vdex

用途:
art文件记录了哪些classes和methods被编译了,以及被编译出到那个oat文件

dex2oat

触发时机:
1,安装后
2,开机后,pms扫描
3,backgroundDexOptService,定时

(1条消息) Android profile-guided dex2oat_大将军王虎剩的专栏-CSDN博客

JIT和AOT共存
Android 7.0上,JIT 编译器被再次使用,采用AOT/JIT 混合编译的策略,特点是:

  1. 应用在安装的时候dex不会再被编译
  2. App运行时,dex文件先通过解析器被直接执行,热点函数会被识别并被JIT编译后存储在 jit code cache 中并生成profile文件以记录热点函数的信息。
  3. 手机进入 IDLE(空闲) 或者 Charging(充电) 状态的时候,系统会扫描 App 目录下的 profile 文件并执行 AOT 过程进行编译。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值