写点什么

ART 云配置文件,提高安卓应用的性能

  • 2019-04-12
  • 本文字数:929 字

    阅读完需:约 3 分钟

ART云配置文件,提高安卓应用的性能

安卓在版本 Pie 中第一次引入了ART优化配置文件,这个新特性利用发送到 Play Cloud 的数据大大缩短了应用在安装或更新后的启动时间。根据谷歌公布的数据显示,应用的启动速度平均提高了 15%,最优情况下可达到 30%。


从版本 Nougat 开始安卓就已经使用 PGO(Profile guideed Optimization-性能分析引导优化)来优化其运行时。这项技术能够动态剖析应用的内存和存储使用情况,并识别出热区代码。PGO 的缺点是它只能依赖单个设备或用户的数据,这使得优化过程非常缓慢。通过 Play Cloud 来整合更多用户和设备的数据,ART 性能分析明显加快了这个优化过程,而且还可以反过来把优化结果应用到所有用户。


很多情况下,开发者会逐步推出他们的应用,比如在正式版之前会发布不同的测试版本,而这时候上述优化就变得更加有用。它使我们在初始测试阶段就可以对应用进行剖析,确定热点代码和优化选项,从而让以后的用户可以直接获益。


为实现这种机制,ART 在 Play Cloud 中的剖析阶段产生了一个核心代码配置文件,这个文件包含了很多匿名的聚合数据,例如,最常用代码的路径、启动时加载的类以及启动时和启动后要执行的代码等相关信息。代码配置文件在 Play Cloud 中以“.deb”格式的元文件存在,元文件可以直接安装到设备,并且对开发人员完全透明。


利用代码配置文件中的信息,谷歌采取了一系列技术来提高应用的性能,包括应用镜像、代码预编译以及字节码重新布局等。


应用镜像是应用启动时所使用的预初始化类的内存映射。在应用启动时,镜像将会直接映射到堆内存。类似地,应用启动时也开始执行代码预编译的目标字节码。字节码是经过预编译和优化的,因此大大节省了 JIT 编译器的工作时间。最后,字节码重新布局是为了保持应用启动时使用的代码能够尽可能紧凑,这样应用启动后代码可以立即执行,从而节省了加载时间。


正如前面所提到的,根据谷歌的统计数据,在经过 ART 性能分析优化之后,应用的平均启动时间提高了 15%,很多应用甚至提高了 20%。该数据显示,除了谷歌自己的应用,还有超过 30000 个外部应用也有所改进。


未来,谷歌将向所有开发者开放 ART 性能优化信息,这样开发者就能够基于用户的真实性能数据来改进他们的应用了。


查看英文原文ART Cloud Profiling to Improve Android App Performance


2019-04-12 08:004147

评论

发布
暂无评论
发现更多内容

深入react源码看setState究竟做了什么?

flyzz177

React

PyTorch深度学习实战 | 搭建卷积神经网络进行图像分类与图像风格迁移

TiAmo

PyTorch 图像处理

2023算云融合产业大会-行业先驱!算力云服务领航者计划评选结果即将揭晓

中国IDC圈

算力 云算力 云计算,

Java线程池执行器的饱和策略

Janwee

线程池 java

震惊,一行MD5居然让小伙伴都回不了家!!!

京东科技开发者

md5 京东云 京东技术 企业号 3 月 PK 榜

文盘Rust -- 安全连接 TiDB/Mysql

京东科技开发者

rust TiDB 京东云 京东技术 企业号 3 月 PK 榜

A-Ops 数据库场景在线应用性能诊断案例

openEuler

数据库 Linux 操作系统 openEuler 性能测评

什么大模型?我是时尚产业“大模王”!

脑极体

AI

mybatis plus怎么使用注解的方式执行原生sql

俊俊哥

mybatis Mybatis-Plus 原生sql

如何用好免费的chatGPT

劼哥stone

人工智能 openai ChatGPT

React源码分析(一)Fiber

goClient1992

React

Amazon Detective 支持 Amazon EKS 上的 Kubernetes 工作负载以进行安全调查

亚马逊云科技 (Amazon Web Services)

使用Nginx作为MySQL的TCP负载均衡器

Janwee

nginx 负载均衡 :MySQL 数据库

运维训练营第17周作业

好吃不贵

一天吃透分布式事务八股文

程序员大彬

Java 分布式事务

React Context源码是怎么实现的呢

flyzz177

React

细说react源码中的合成事件

flyzz177

React

用javascript分类刷leetcode3.动态规划(图文视频讲解)

js2030code

JavaScript LeetCode

前端工程师leetcode算法面试必备-二分搜索算法(上)

js2030code

JavaScript LeetCode

微信小程序管理软件助力企业数字化转型,实现智能化升级

FinFish

私有小程序技术 小程序管理平台 小程序技术 小程序管理

马克·安德森:纯粹产品护城河在硅谷少见,SaaS公司护城河是“分销”

B Impact

前端工程师leetcode算法面试必备-二分搜索算法(下)

js2030code

JavaScript LeetCode

Nautilus Chain 现已推出测试网“Triton ”,有哪些潜在的机会?

股市老人

深入探究 Go log 标准库

江湖十年

Go 后端 日志 log

精华推荐 |【深度挖掘RocketMQ底层源码】「生产故障分析系列」深度挖掘RocketMQ底层那些导致消息丢失的汇总盘点透析(TIMEOUT_CLEAN_QUEUE)broker busy

洛神灬殇

RocketMQ 消息队列 3月日更 原理分析 底层源码

看透react源码之感受react的进化

goClient1992

React

React-Hooks源码深度解读

goClient1992

React

毕业设计

张贺

Matlab常用图像处理命令108例(五)

timerring

图像处理

提示工程在AI绘画领域中的应用

FinFish

AI绘画 提示工程

ART云配置文件,提高安卓应用的性能_移动_Sergio De Simone_InfoQ精选文章