写点什么

ART:新的 Android 运行时库

  • 2014-07-09
  • 本文字数:1228 字

    阅读完需:约 4 分钟

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-07-09 11:523179
用户头像

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

关注

评论

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

Prometheus Exporter (十九)Collectd Exporter

耳东@Erdong

Prometheus 28天写作 exporter 12月日更 Collectd

Linux云计算架构师:Linux全套实战学习资料

侠盗安全

Linux linux运维 运维工程师 云计算架构师 linux电子书

学python,怎么能不学习scrapy呢,这篇博客带你学会它

梦想橡皮擦

12月日更

喜报 | 旺链科技获批张江国家自主创新示范区专项发展资金!

旺链科技

区块链 数字经济 产业区块链

有了六顶思考帽,从此告别无效争吵

Ian哥

项目管理 28天写作 项目管理工具 六顶思考帽

模块1作业

miliving

react源码解析17.context

buchila11

React React Hooks

【LeetCode】截断句子Java题解

Albert

算法 LeetCode 12月日更

Prometheus Exporter (十八)Graphite Exporter

耳东@Erdong

Prometheus 28天写作 exporter 12月日更 Graphite

【HarmonyOS 专题】01 基础 Mac 环境安装配置

阿策小和尚

HarmonyOS 28天写作 Android 小菜鸟 12月日更

Go语言学习查缺补漏ing Day4

恒生LIGHT云社区

编程语言 Go 语言

说说节奏感

Justin

方法论 28天写作

12 张图 | 深入理解 Eureka三层缓存架构

悟空聊架构

缓存 Eureka 28天写作 悟空聊架构 12月日更

聊聊 Kafka: 在 Linux 环境上搭建 Kafka

老周聊架构

签约计划第二季 2月月更

大厂算法面试之leetcode精讲24.其他类型题

全栈潇晨

算法 LeetCode

Flutter开发:TextField常用属性的使用

三掌柜

28天写作 12月日更

Git进阶(十一):Git 常用操作汇总

No Silver Bullet

git 12月日更

使用 javap 分析 Java 的字符串操作

汪子熙

Java jdk 28天写作 12月日更 javac

react源码解析18事件系统

buchila11

React React Hooks

Flutter 动画【Flutter专题16】

坚果

flutter 28天写作 签约计划第二季 12月日更

大厂算法面试之leetcode精讲23.并查集

全栈潇晨

算法 LeetCode

从微服务架构的现状和未来看学习路径

博文视点Broadview

【量化】资产组合理论:鸡蛋不能放在一个篮子里

恒生LIGHT云社区

量化投资 量化

对话中国人寿:DevOps实践经验分享

龙智—DevSecOps解决方案

DevOps 中国人寿

模块一学习总结

whoami

「架构实战营」

MySQL 连接数过多的处理方法合集 - ERROR 1040 Too many connections - 卡拉云

蒋川

MySQL MySQL 数据库

团队基建系列 - 组织知识传承 1

搬砖的周狮傅

团队成长

使用javap深入理解Java整型常量和整型变量的区别

汪子熙

Java jdk 28天写作 12月日更 javap

网络协议之:基于UDP的高速数据传输协议UDT

程序那些事

TCP 网络协议 udp 程序那些事 12月日更

全网最全-混合精度训练原理

科技热闻

拖延

Nydia

ART:新的Android运行时库_Java_Barry Burd_InfoQ精选文章