写点什么

ART:新的 Android 运行时库

2014 年 7 月 09 日

2014 年的 Google I/O 大会上,演讲者 Brian Carlstrom、Anwar Ghuloum 和 Ian Rogers(都来自于 Google)讨论了 ART (Android RunTime 的缩写)。在下一代 Android 版本中,ART 会取代 Dalvik 成为默认的平台。(下一代 Android 版本,叫做 Android L ,已经有一个预览版提供给开发人员下载了。Android L 会在秋天的某一时间发布。)

Dalvik 诞生于 2000 年代中期,那个时候移动设备的处理器速度相对较慢,内存也很有限。因此,Dalvik 无法充分利用如今这些移动硬件,更快的 CPU 和 GPU、更大的内存以及高分辨率屏幕。相反,新的 ART 平台就是专了发挥多核架构和 64 位指令集的优势而设计的。

Dalvik 使用 JIT 编译技术:这种方案使应用程序的部分指令在运行的时候得到转换。JIT 的优势是,应用程序没有运行的时候,它占用的内存相对较小。劣势是一边运行一边转换会使应用程序的性能变差。新的 ART 平台牺牲了内存来换取性能,它用的是 ahead-of-time(AOT)编译技术。在 ART 中,一个应用程序的所有指令在运行前就编译好了。

ART 的另一个重大改进是垃圾回收算法。Dalvik 的垃圾回收分为两个阶段。第一个阶段,Dalvik 暂停所有的线程来分析堆的使用情况。第二个阶段,Dalvik 暂停所有线程来清理堆。因此,Dalvik 中一次典型的垃圾回收耗时约 10 毫秒——这已经足够导致应用在性能上的“卡顿”(这里的术语“卡顿”指的是界面元素在屏幕上断断续续地移动。通常,糟糕的性能会导致应用在动画上丢帧。丢帧是卡顿的重要原因。)

ART 改进后的垃圾回收算法只暂停线程一次。典型的停顿时间从 10 毫秒降到了 3 毫秒。除此以外,ART 的内存分配程序(称为 rosalloc)比 Dalvik 中的分配器更少使用锁。这样就减少了很多运行中由于分配内存导致的停顿。

跟 Dalvik 不一样,ART 支持 64 位处理器。Play Store 上大约 85% 的应用程序本来就兼容 64 位,因为他们不含有任何的原生(NDK)代码。

在很多场景下,支持 64 位的主要原因是越来越大的内存。对 Android 来说这不是个问题,因为市面上还没有任何移动设备的内存超过 4GB。但是当 ART 运行在 64 位模式下的时候,它会运用一些 32 位处理器上没有的指令。这些 64 位的指令比它们对应的 32 位版本更快。

最重要的是在 ART 上运行的应用程序要比在 Dalvik 上运行快。快多少?在 Google I/O 大会的对话中,我看到这个数字从 10% 到 300% 都有。很多性能基准程序测试下来,快 30% 到 80% 比较常见。但是,在一场由 Big Android BBQ(译者注:一项为 Android 开发者、黑客举办的科技聚会,详见官网)的人赞助的非正式聚会上,我看到他们同时在三台设备上运行同一应用程序。在其他条件都相同的前提下,一台设备跑Dalvik,第二台跑32 位的ART,第三台跑64 位的ART。在Dalvik 的上,那个应用程序的性能简直无法忍受。在32 位的ART 上,动画变得流畅一些了,但还是有点“卡顿”,在64 位的ART 上,动画相当流畅,任何物体的移动都感觉不到停顿。

参考原文链接: http://www.infoq.com/news/2014/07/art-runtime

2014 年 7 月 09 日 11:522616
用户头像

发布了 77 篇内容, 共 31.3 次阅读, 收获喜欢 20 次。

关注

评论

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

甚至你可以在网抑云上听歌

ES_her0

28天写作 3月日更

如果写文字只是自我表达「Day 19」

道伟

28天写作

智慧公安政府系统集成软件开发,智慧警务平台搭建方案

WX13823153201

MySQL原理

Sakura

28天写作 28天挑战 3月日更

醒一醒,讲到 ZooKeeper 的选举机制了

HelloGitHub

Java zookeeper ZooKeeper原理

如何通过XMind 实践OKR 工作法

博文视点Broadview

第二届开发者社区【金码奖】,揭晓了!

京东科技开发者

开发者 开发者社区

历史技术栈体系即将崩溃,我们如何应对?

VoltDB

数据库 5G 边缘计算 VoltDB

Python yaml 使用的包

HoneyMoose

(28DW-S8-Day19) 以太坊是什么

mtfelix

28天写作

法大大完成D轮9亿元融资,腾讯领投

人称T客

数据分析利器之Excel功能篇

小飞象@木木自由

算法攻关-从上到下打印二叉树(O(n))_offer32

小诚信驿站

架构师 刘晓成 小诚信驿站 28天写作 算法攻关

Elasticsearch Reindex & Index Alias

escray

elastic 28天写作 死磕Elasticsearch 60天通过Elastic认证考试

深入分析mysql为什么不推荐使用uuid或者雪花id作为主键

xcbeyond

MySQL MySQL优化 3月日更

LeetCode题解:64. 最小路径和,动态规划,JavaScript,详细注释

Lee Chen

算法 LeetCode 前端进阶训练营

软考备考视频的目录

IT蜗壳-Tango

3月日更 软考

硬核干货丨借助多容器Pod,轻松扩展K8S中的应用

RancherLabs

“七大属性加持,三个全新升级组件”这个高性能利器有点厉害

华为云开发者社区

数据库 数据湖 Clickhouse 华为云 集群

四、MongoDB查询(2)

Kylin

读书笔记 分布式数据库mongodb 3月日更

Python 通过命令行安装包的时候 pip 提示错误

HoneyMoose

FutureTask源码解析

徐海兴

多线程 Future future设计模式

习惯

lenka

3月日更

第五届广州4A干货大会成功举办;《王者荣耀》推出首部官方动画番剧并将与奢侈品品牌Burberry进项跨界联名

󠀛Ferry

七日更 3月日更

Redis工具收费后新的开源已出现

happlyfox

学习笔记 工具软件 28天写作 3月日更

Everything is Serverless,从开源框架对比说起

华为云开发者社区

云计算 Serverless 云原生 无服务器 开源框架

Python 注释

HoneyMoose

正则表达式.06 - 断言

insight

正则表达式 3月日更

你的决定我做主——锚定效应

Justin

心理学 28天写作 游戏设计

问题剖析之消息队列的架构设计

Kylin

读书笔记 消息队列架构 3月日更

夺命剪刀脚(死锁)

Arvin

方法论 死锁

ART:新的Android运行时库-InfoQ