写点什么

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

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

关注

评论

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

netty架构图,linux教程视频,缓存+一致性哈希+分布式面试题

Java 程序员 后端

Redis缓存:尚硅谷springboot百度云,Java中高级面试题总结

Java 程序员 后端

RocketMQ避坑指南,java入门教程全套,实战篇

Java 程序员 后端

mysql基础教程视频,牛客网中级项目异步队列,这操作真香

Java 程序员 后端

mysql数据库优化面试,孙鑫java视频教程百度网盘,程序员必学

Java 程序员 后端

netty实战pdf,拉钩教育java就业集训班,Java开发热门前沿知识

Java 程序员 后端

springboot教学视频,mysql破解版百度云,微盟Java笔试题

Java 程序员 后端

Mycat和Mysql搭建高可用企业数据库集群,程序员35岁真的是分水岭吗

Java 程序员 后端

mysql的面试题及答案,尚硅谷与达内哪家好,Java虚拟机学习集锦是我攒来的

Java 程序员 后端

netty框架教程,mysql数据库教程视频指导版,HTTPS面试常问全解析

Java 程序员 后端

RocketMQ生产部署架构设计,Java面试超详细知识点

Java 程序员 后端

spring教程下载,linux入门基础教程,2021Java者未来的出路在哪里

Java 程序员 后端

springboot实战项目源码,java算法视频百度云盘,阿里P8亲自讲解

Java 程序员 后端

spring全方位深入探索,2021Java开发社招面试解答之性能优化

Java 程序员 后端

RPC的通信Netty的底层是Nio,在一家公司干多长时间跳槽才合适

Java 程序员 后端

springcloud架构源码,慕课网极客学院,总结到位

Java 程序员 后端

Spring容器如何解决循环依赖的原理,Java编程教学视频

Java 程序员 后端

springcloud入门,动力节点与尚学堂,月薪30K

Java 程序员 后端

springcloud百度网盘,牛客网面试题,Java面试高频知识点

Java 程序员 后端

springmvc原理图解,尚硅谷ajax源码,Redis宕机数据丢失解决方案

Java 程序员 后端

MySQL+Tomcat+JVM,看完还怕面试官,阿里程序员的Java之路

Java 程序员 后端

Redis灵魂14问,Java编程从入门到实践

Java 程序员 后端

SpringBoot,黑马java视频教程,绝对干货

Java 程序员 后端

rocketmq原理解析,尚硅谷深圳校区,万分膜拜!

Java 程序员 后端

springcloud教程入门,极客时间kafka,4年小Java的心路历程

Java 程序员 后端

MySQL优化原理分析及优化方案总结,Java入门

Java 程序员 后端

netty源码剖析与实战百度云,牛客网搜题软件,字节跳动高级Java开发面试

Java 程序员 后端

Nginx如何支持HTTPS,“重金求来”Alibaba技术官并发编程笔记

Java 程序员 后端

mybatis面试题及答案,尚硅谷java入门,专属于Java程序员的学习福音

Java 程序员 后端

oppoJava面试题,开课吧高级架构师10期咋样,正式加入字节跳动

Java 程序员 后端

springboot思维导图,尚学堂java300集,从头到尾,都是精华

Java 程序员 后端

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