写点什么

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

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

关注

评论

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

浅谈云上攻防——Web应用托管服务中的元数据安全隐患

腾讯安全云鼎实验室

安全攻防 云安全 元数据 网络攻防

你的直观感受有可能是错的

石云升

学习 认知偏差 7月日更

Demo

Command

#架构实战营

隔壁工程师都馋哭了我的逆向工程IDA,说要给我搓背捏脚

网络安全学海

网络安全 信息安全 渗透测试 漏洞分析 逆向工程

《持之以恒的从事运动》五

Changing Lin

7月日更

禾木之变:2021我们该如何持续拥抱AI?

脑极体

Ubuntu Server 20.04搭建zookeeper集群

玏佾

zookeeper 群集安装 搭建 zk 集群部署

模块八 - 设计消息队列存储消息数据的 MySQL 表格

华仔架构训练营

为什么公司应该效仿开源的文化

WorkPlus

讨论 | 低代码能解决制造业企业数字化转型所面临的问题吗?

优秀

低代码

推荐系统的价值观(三十二)

数据与智能

价值观 推荐系统

自建开发工具系列-Webkit内存动量监控UI(一)

Tim

FrontEnd 调试工具 Webkit 工具UI

深入浅出 Gitalk 留言插件

悟空聊架构

开源 网站 7月日更 网站建设 留言

打造中国数字军人 数军科技携黑科技亮相(北京)军博会

科技热闻

5分钟速读之Rust权威指南(三十九)unsafe

wzx

rust

从零开始学习3D可视化之摄像机

ThingJS数字孪生引擎

大前端 可视化 数字孪生

第一周作业-对比不同公司产品招聘JD

小夏

产品经理训练营 邱岳

爱奇艺奇秀直播的秒播体验优化实践

爱奇艺技术产品团队

直播 优化

《面试八股文》之kafka21卷

moon聊技术

kafka 面试

Linkflow CDP亮相GDMS全球数字营销峰会

Linkflow

CDP 用户画像 数字营销

前端 JavaScript 实现一个简易计算器

编程三昧

JavaScript 大前端 代码实现

面对大规模 K8s 集群,这款诊断利器必须要“粉一波”!

尔达Erda

开源 云原生 operator PaaS kubernete

区块链技术在“三资”监管领域的应用

CECBC

生命科学领域新工具:北鲲云超算平台,梦启航的地方

北鲲云

百度程序员推荐的书籍,今天免费送!

百度Geek说

如何科学地系统地梳理出CDP的RFP?

Linkflow

我看 JAVA 之 并发编程【一】FutureTask & Callable

awen

Java 多线程 Callable FutureTask

详聊微服务观测|从监控到可观测性,我们最终要走向哪里?

尔达Erda

开源 微服务 云原生 APM PaaS

架构实战营模块8作业

Geek_649372

架构实战营

pha挖矿系统源码开发

获客I3O6O643Z97

区块链+ PHA矿机挖矿 PHA质押挖矿

边界防御·信息安全保密圈的 “丈八蛇矛”

郑州埃文科技

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