【QCon】精华内容上线92%,全面覆盖“人工智能+”的典型案例!>>> 了解详情
写点什么

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:523014
用户头像

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

关注

评论

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

直播预告丨NLP领域的2020年大事记及2021展望

京东科技开发者

机器学习 AI nlp

HTML(四)——建立超链接

程序员的时光

html 程序员 28天写作

两层和三层网络架构差异

基于Prometheus+Grafana打造企业级Flink监控系统

王知无

大数据 flink 监控

看懂2020年智能浪潮,我们从百度和谷歌的AI足迹出发

脑极体

1000公里续航动力电池背后的迷雾与真相

脑极体

Windows DHCP最佳实践(三)

BigYoung

windows Windows Server 2012 R2 DHCP

Go中的SSRF攻防战

Gopher指北

安全 Go 语言

竟然输给了一款软件「幻想小说 13/28」

道伟

28天写作

【我给面试官画饼】软件测试理论基础、质量保证常见面试题——会被面试官赶出来吗?

程序员阿沐

面试 软件测试 测试工程师 质量保证

数据倾斜?Spark 3.0 AQE专治各种不服

王知无

大数据 spark

京东架构师分享的 Redis学习笔记手抄版;

Java架构师迁哥

Spring Boot 中使用拦截器

武哥聊编程

Java springboot SpringBoot 2 拦截器 28天写作

28天瞎写的第二百二十四天:食品专业的编程高手

树上

28天写作

Orleans 知多少 | .NET分布式框架

圣杰

dotnet actor orleans

重学JS | Web Workers让JS存在多线程环境

梁龙先森

编程 大前端 28天写作

LKA是如何实现的(28天写作 Day13/28)

mtfelix

自动驾驶 28天写作

大数据知识专栏 - MapReduce的Combiner实现shuffle调优

小马哥

大数据 hadoop mapreduce 七日更

甲方日常 88

句子

工作 随笔杂谈 日常

企业短信服务质量与用户体验如何监控?短信监测技术震撼来袭

博睿数据

短信 数据监测

大数据知识专栏 -MapReduce 自定义排序技术

小马哥

大数据 hadoop mapreduce 七日更

HDFS中的常用压缩算法及区别

王知无

大数据 hdfs

蔡超:这八点架构师感悟,真的很干货 | 大道至简

李忠良

28天写作

JVM的内存分代,这篇文章帮你理一理

Java鱼仔

Java 面试 JVM

基础不牢,地动山摇;自学进大厂的第18天!

Java架构师迁哥

管理者掌握这5个提问技巧,秒变提问高手

一笑

团队管理 管理 团队建设 提问的艺术 28天写作

【并发编程的艺术】JAVA并发机制的底层原理

程序员架构进阶

Java 架构 并发编程 内存模型 28天写作

老龄化不可避免,灰犀牛是否可以成为黑天鹅?

JiangX

政策 28天写作 双循环 人口结构

从烟酒茶说系统化学习

张老蔫

28天写作

项目管理变更之交付目标的变化

L3C老司机

存在即合理

lidaobing

比特币 28天写作

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