dex2oat编译模式概述

dex2oat是Android ART(Android Runtime)虚拟机中的一个关键组件,它负责将DEX(Dalvik Executable)文件中的字节码转换为更接近机器码的格式,以提高应用程序的启动速度和运行效率。dex2oat提供了多种编译模式,以适应不同的应用场景和性能需求。以下是对dex2oat编译模式的详细解析:

一、dex2oat编译模式概述

dex2oat编译模式决定了DEX文件被编译成何种形式的代码,以及编译过程中应用的优化策略。不同的编译模式在编译时间、代码大小、运行速度和资源占用等方面有所不同。

二、dex2oat编译模式详解

  1. verify模式

    • 功能:仅对DEX文件进行验证,不进行任何编译优化。
    • 应用场景:主要用于测试或调试阶段,确保DEX文件的正确性。
    • 特点:编译速度快,不生成优化后的代码,运行时性能可能较低。
  2. quicken模式

    • 功能:对DEX文件中的指令码进行优化,生成优化后的指令码并存储在ODEX文件中。
    • 应用场景:适用于对性能有一定要求,但不需要全量编译的应用程序。
    • 特点:编译速度相对较快,生成的代码比未优化的DEX文件更高效,但可能不如全量编译的代码性能优越。
  3. speed-profile模式

    • 功能:基于应用程序的运行时行为,对热点代码进行AOT(Ahead-Of-Time)编译,生成机器码并存储在OAT文件中。热点代码的索引存储在ART文件中。
    • 应用场景:适用于需要快速启动和高效运行的应用程序。
    • 特点:编译时间较长,但生成的代码运行速度快,资源占用相对较低。通过优化热点代码,可以显著提高应用程序的性能。
  4. speed模式

    • 功能:对DEX文件中的所有字节码进行全量编译,生成机器码并存储在OAT文件中。
    • 应用场景:适用于对性能有极高要求的应用程序。
    • 特点:编译时间长,生成的代码运行速度快,但资源占用相对较高。全量编译可以确保应用程序在所有情况下都能获得最佳性能。
  5. 其他模式

    • 除了上述四种主要编译模式外,dex2oat还可能提供其他编译模式,如space-profile和space等。这些模式主要用于平衡代码大小、编译时间和运行速度之间的关系。具体选择哪种模式取决于应用程序的需求和性能要求。

三、dex2oat编译模式的选择

在选择dex2oat编译模式时,需要考虑以下因素:

  • 应用程序的需求:根据应用程序的性能要求、启动速度、资源占用等方面的需求来选择合适的编译模式。
  • 编译时间:不同编译模式的编译时间不同,需要根据实际情况进行权衡。
  • 代码大小:编译后的代码大小也是选择编译模式时需要考虑的因素之一。较大的代码可能会占用更多的存储空间,并可能影响应用程序的加载速度。
  • 运行时性能:编译模式的选择会直接影响应用程序的运行时性能。因此,在选择编译模式时需要进行充分的测试和评估,以确保获得最佳的性能表现。

四、dex2oat的触发时机

dex2oat主要在以下几种情况下被触发:

  1. 开机过程:PackageManagerService(PMS)扫描手机中的各个目录,并在安装的时候,对这些App进行dex2oat。如果安装的App比较多,或者dex2oat执行比较慢,那么开机时间就会比较长。
  2. 系统空闲时:当系统处于空闲状态并满足一定的条件(如充电)时,会对应用进行dex2oat。在正式dex2oat之前,系统会进行一系列的判断,比如根据profile的更新量决定是否进行本次优化。
  3. 应用主动触发(Android 10及以上版本不再支持):在Android 10之前的版本中,应用可以通过主动触发dex2oat来优化自身插件。但从Android 10开始,这一行为被禁止,ART将仅接受系统生成的OAT文件。

五、dex2oat的相关系统配置

dex2oat的相关系统配置可以通过adb shell命令查询,例如:

adb shell getprop | grep pm.dex

 

可能会得到如下配置信息(具体信息可能因设备和系统版本而异):

[pm.dexopt.ab-ota]:[speed-profile]
[pm.dexopt.bg-dexopt]:[speed-profile]
[pm.dexopt.boot]:[verify]
[pm.dexopt.first-boot]:[quicken]
[pm.dexopt.inactive]:[verify]
[pm.dexopt.install]:[speed-profile]
[pm.dexopt.shared]:[speed]

这些配置项用于控制dex2oat在不同场景下的行为,例如是否进行优化、优化的程度等,详细如下:

设置项解释
[pm.dexopt.ab-ota]:[speed-profile]在执行AB OTA(Over-The-Air)更新后,系统使用speed-profile编译过滤器。这意味着系统会对DEX文件进行验证,并根据性能配置文件(profile)对热点方法进行AOT编译,以优化应用性能。选择speed-profile可以在升级后快速提升性能,因为OTA本身比较耗时,选择这种方式可以平衡编译时间和性能提升。
[pm.dexopt.bg-dexopt]:[speed-profile]bg-dexopt代表后台DEX优化服务,它在设备空闲和充电时运行。使用speed-profile编译过滤器可以充分利用配置文件引导型编译,节省存储空间,并提升应用启动和运行效率。
[pm.dexopt.boot]:[verify]在设备启动(非首次启动)时,使用verify编译过滤器。这意味着系统仅对DEX文件进行验证,而不进行AOT编译。这有助于缩短启动时间,因为验证过程比编译过程要快。
[pm.dexopt.first-boot]:[quicken]在设备首次启动时,使用quicken编译过滤器。除了进行DEX文件验证外,quicken还会优化一些DEX指令,以提高解释器的性能。然而,请注意,在最新的Android版本中,对于首次启动的编译过滤器设置可能有所不同,具体取决于系统映像的编译方式和类加载器上下文。
[pm.dexopt.inactive]:[verify]对于不活跃的应用,使用verify编译过滤器。这有助于节省系统资源,因为不活跃的应用通常不需要进行AOT编译。
[pm.dexopt.install]:[speed-profile]当通过PackageManagerService安装应用时,使用speed-profile编译过滤器。这意味着系统会对安装的DEX文件进行验证,并根据性能配置文件对热点方法进行AOT编译,以优化新安装应用的性能。
[pm.dexopt.shared]:[speed]对于共享库或系统框架中的DEX文件,使用speed编译过滤器。这意味着系统会对所有方法进行AOT编译,以最大化性能。由于共享库和系统框架是系统级别的组件,因此可以承受较长的编译时间以获得最佳性能。

需要注意的是,Android系统的具体行为可能会随着版本的更新而有所变化。此外,对于某些特定的设备或定制系统,这些设置项的值和行为也可能有所不同。 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/920513.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Linux: 任务的定时与延期

概述 ls 这种命令是立刻执行的命令,在linux中命令还可以延时执行,它们都涉及到时间的观念 常用命令 先来看下有关系统时间的规格 1 ) date 命令调节时间 $ date 显示当前时间还可以去定制 date 的一个输出, $ man date 可自定义输出 $ d…

RBAC——基于角色的访问控制

目录 一、RBAC核心概念 1. 角色(Role) 2. 用户(User) 3. 权限(Permission) 4. 会话(Session) 二、RBAC模型的演进 1. RBAC0:基本模型 2. RBAC1:角色…

OceanBase V4.x应用实践:如何排查表被锁问题

DBA在日常工作中常常会面临以下两种常见情况: 业务人员会提出问题:“表被锁了,导致业务受阻,请帮忙解决。” 业务人员还会反馈:“某个程序通常几秒内就能执行完毕,但现在却运行了好几分钟,不清楚…

同三维T80003JEHS 4K/60帧HDMI/SDI超高清H.265解码器

1路HDMI和1路SDI输出,1路3.5音频输入和1路3.5音频输出,1个USB2.0口1个USB3.0口,带1个RS232串口,2个网口,支持1路4K60或4路4K30或16路1080P或32路720P解码输出。4种画面分割显示模式。 产品简介: 同三维T80…

【更新中】《硬件架构的艺术》笔记(五):低功耗设计

介绍 能量以热量形式消耗,温度升高芯片失效率也会增加,增加散热片或风扇会增加整体重量和成本,在SoC级别对功耗进行控制就可以减少甚至可能消除掉这些开支,产品也更小更便宜更可靠。本章描述了减少动态功耗和静态功耗的各种技术。…

网络安全审计概述与分类

目录 网络安全审计概述等保五个级别对审计要求网络安全审计系统组成网络安全审计系统类型 网络安全审计概述 4A分别是认证、授权、账号、审计 网络安全审计是指对网络信息系统的安全相关活动信息进行获取、记录、存储分析和利用的工作。 网络安全审计的作用在于建立“事后”…

安宝特方案 | AR助力紧急救援,科技守卫生命每一刻!

在生死时速的紧急救援战场上,每一秒都至关重要!随着科技的发展,增强现实(AR)技术正在逐步渗透到医疗健康领域,改变着传统的医疗服务模式。 安宝特AR远程协助解决方案,凭借其先进的技术支持和创新…

IDEA:2023版远程服务器debug

很简单,但是很多文档没有写清楚,wocao 一、首先新建一个远程jvm 二、配置 三、把上面的参数复制出来 -agentlib:jdwptransportdt_socket,servery,suspendn,address5005 四、然后把这串代码放到服务器中(这里的0.0.0.0意思是所有IP都能访问&a…

Midjourney基础命令和提示词

1 基础命令 1.1 /imagine prompt 生成图片的核心命令,prompt 后输入描述。 /imagine prompt: A majestic dragon flying over a misty mountain, cinematic lighting, 4K resolution 高级提示 1.1.1 基本参数 图片比例 --ar 图片比例 混乱 Aspect Ratios --…

ElasticSearch7.x入门教程之索引概念和基础操作(三)

文章目录 前言一、索引基本概念二、索引基本使用elasticsearch-head插件Kibana使用 总结 前言 要想熟悉使用ES的索引,则必须理解索引相关的概念,尤其是在工作当中。 在此记录,方便开展工作。 一、索引基本概念 尽量以通俗的话语。 1、集群…

【SQL50】day 2

目录 1.每位经理的下属员工数量 2.员工的直属部门 3.判断三角形 4.上级经理已离职的公司员工 5.换座位 6.电影评分 7.修复表中的名字 8.患某种疾病的患者 9.删除重复的电子邮箱 1.每位经理的下属员工数量 # Write your MySQL query statement below #e1是经理,…

基于 RocketMQ 实现 AMQP 协议实践

导语 在Apache CoC 2024 杭州站大会中,腾讯云高级工程师张乐为与会者带来了精彩的演讲。围绕《基于 RocketMQ 底座实现 AMQP 协议》的背景、目标、方案设计以及几个核心技术实现做了详细的阐述。 作者简介 张乐 腾讯高级工程师,负责腾讯云 RabbitMQ S…

python成绩分级 2024年6月python二级真题 青少年编程电子学会编程等级考试python二级真题解析

目录 python成绩分级 一、题目要求 1、编程实现 2、输入输出 二、算法分析 三、程序代码 四、程序说明 五、运行结果 六、考点分析 七、 推荐资料 1、蓝桥杯比赛 2、考级资料 3、其它资料 python成绩分级 2024年6月 python编程等级考试二级编程题 一、题目要求 …

我做了一份斯坦福CS229吴恩达机器学习笔记

吴恩达教授的机器学习课程,可以说是AI领域的一块金字招牌。这门在斯坦福大学开设的课程,历经十余年,依旧是机器学习入门的经典之作。 记得当年,这门课火爆到吴恩达教授不得不将其搬到线上,结果不仅在斯坦福&#xff0c…

ABAP开发学习——SNRO

SAP凭证号码的指定分为外部给号和内部给号。 Internal number range即内部给号,指系统根据预先维护好的号码范围(只能是阿拉伯数字)依序给号,给出已有数字的下一个编号。 External number range即外部给号,后台配置时指指定一个号码范围(可以…

SpringBoot3整合Hutool-captcha实现图形验证码

文章目录 验证码需求分析:项目创建import方式的使用说明exclude方式定义接口:接口定义定义 CaptchaController前端代码在整合技术框架的时候,想找一个图形验证码相关的框架,看到很多验证码不在更新了或者是在中央仓库下载不下来,还需要多引入依赖。后面看到了Hutool **图形…

mysql-connector-java的jar包的下载方法汇总

方法一: 网址:http://mvnrepository.com/artifact/mysql/mysql-connector-java 1.进去后选择自己的版本: 2.然后再点击 3. 需要下载其他的jar包(或者依赖)都是在此网址中可以下载到的 3.1 3.2 3.3 3.4 方法二&#…

Spring Cloud Stream实现数据流处理

1.什么是Spring Cloud Stream? 我看很多回答都是“为了屏蔽消息队列的差异,使我们在使用消息队列的时候能够用统一的一套API,无需关心具体的消息队列实现”。 这样理解是有些不全面的,Spring Cloud Stream的核心是Stream&#xf…

i春秋-签到题

练习平台地址 竞赛中心 题目描述 题目内容 点击GUESS后会有辨识细菌的选择题 全部完成后会有弹窗提示 输入nickname后提示获得flag F12检查 元素中没有发现信息 检查后发现flag在控制台中 flag flag{663a5c95-3050-4c3a-bb6e-bc4f2fb6c32e} 注意事项 flag不一定要在元素中找&a…

无人机 PX4飞控 | CUAV 7-Nano 飞行控制器介绍与使用

无人机 PX4飞控 | CUAV 7-Nano 飞行控制器介绍与使用 7-Nano简介硬件参数接口定义模块连接供电部分遥控器电机 固件安装 7-Nano简介 7-Nano是一款针对小型化无人系统设备研发的微型自动驾驶仪。它由雷迅创新自主研发和生产,其创新性的采用叠层设计,在极…