Android L 使用ART能提高多少性能?
刚刚结束的 Google I/O 大会上,Android 下一代操作系统「L」带来不少惊喜。新系统运行更快、更省电。
然而开发者对这个新系统也有颇多疑问,比如新的运行模式 ART 对开发者意味着什么?ART 模式能否让应用的体验超越苹果?我认为在 ART 运行方式下「L」的性能提升在 15% 到 80% 之间。同时,ART 优化了垃圾回收方式,执行效率比现行的 Dalvik 提高 50% 以上,减少了执行垃圾回收时对应用带来的卡顿,使应用运行更流畅。
而在安全性方面,ART 和 Dalvik 相比,安全模型和基本机制没有变化。但 ART 有一些细节改进,对安全有帮助。比如,安装时对 dex 文件做了更严格的验证。
以下我汇集整理了 360 论坛上开发者提问最多的 6 个问题,一并解答,希望可以帮助开发者更好地认识这个全新的系统。

问题 1. 为什么 ART 能提高性能?
答:主要来自两方面。
预先(Ahead-of-time)编译。Android 应用开发时,生成的 Dex 文件包含 Java 的 Byte Code。在 Android L 以前,默认用 Dalvik 虚拟机。应用运行时,Dalvik 对 Java Byte Code 进行解释执行,或进行 Junt-In-Time 的编译。在 Android L 里,应用安装时,用系统工具 dex2oat 将安装包中的 Dex 文件编译为 ELF 格式的执行文件(.oat 文件)。应用运行时直接执行二进制指令。
优化垃圾回收(garbage collection)。垃圾回收主要有两种:(1)gcconcurrent。执行时,Dalvik 会在本次 gc 的开始和结束时会短时间暂停代码的执行。(2)gcforalloc。执行时,会较长时间中断 Java 代码的运行。在 ART 里,执行 gcconcurrent 时,只会暂停代码一次。执行 gcforalloc 时,中断 Java 代码运行的时间大大缩小了。总体上讲,ART 里垃圾回收占用的开销比 Dalvik 少 50% 以上。减少了垃圾回收时对应用带来的卡顿,使应用运行更流畅。
问题 2. 对应用开发者来说,需要做什么适配工作以支持 ART。比如重新编译、打包?
答:对绝大多数开发者来说,不需要。不论虚拟机是 Dalvik 还是 ART,安装包里所包含的仍然是 Dex 文件。由 Dex 文件编译为二进制文件的工作是在应用安装时,由装在设备上的系统工具 dex2oat 完成的。
问题 3. Android 的应用在 ART 里运行后,开发者还能在 Java 层面进行调试吗?
答:可以。事实上,应用安装后,编译生成的.oat 文件中,包含了原始的 Dex 文件。保留 Dex 文件有两个原因:
需要 Dex 里的关于类的信息,以支持 Java 反射等操作。
调试时,要用 Dex 里的调试信息。
正由于这个原因,编译生成的.oat 文件,大小是原始的 Dex 文件的两倍以上。
问题 4. 用 ART 后,性能最终能提高多少?
答:取决于具体的应用。在 Google I/O 上,Google 给的例子是提升两倍以上。
ART 我们实际测试下来,性能提升在 15% 到 80% 之间。对于大量使用 CPU 的应用,性能提升比较明显。但如果应用程序的时间主要花在调用系统 API,提升会小一些。因为很多系统 API 的代码主要在底层的.so 里面。
问题 5. ART 在安全性上有没有提升?
答:ART 和 Dalvik 相比,安全模型和基本机制没有变化。但 ART 有一些细节改进,对安全有帮助。比如:
安装时对 dex 文件做了更严格的验证。
纠正了 Dalvik 长期存在的一个对象模型的问题:一个类里的方法,如果没有加访问限制(即没有用 Public,Private,Protected 描述),Java 规定是 package-private 方法,不在同一 package 的子类不能访问和重载。而 Dalvik 一直允许子类重载 package-private 的方法。ART 里做了修改,行为与 Java 标准一致。
问题 6. Android L 使用 ART 后,有什么要引起注意的地方?
答:主要有这么几个:
因为安装时进行了预先编译。应用安装的时间变长,安装后生成的文件变大。
如果以 DexClassLoader 的形式加载代码,第一次执行时间也会变长。
对应用最好进行兼容性测试。大多数应用无需修改,但如果应用程序本身对 Dex 文件做了处理,比如进行了加壳,可能有兼容性问题。
总体来说,Android L 十分值得我们期待,今年秋天 Google 将推出正式版本,不过鉴于目前 Android 系统碎片化的现状,当前大部分手机无法升级,只能购买新款手机。
极客观察均为极客公园原创报道,转载请注明原文链接。
Android L 使用ART能提高多少性能?的更多相关文章
- Android L开发指南
导语:Android下一代操作系统“ L”对开发者意味着什么?ART模式能否让应用的体验超越苹果? 刚刚结束的 Google I/O大会上,Android下一代操作系统“ L”带来不少惊喜.新系统运行 ...
- 安卓执行机制JNI、Dalvik、ART之间的比較 。android L 改动执行机制。
Android L默认採用ART执行环境.全然兼容64位移动处理器.Google称这将比此前的Dalvik模式性能提高两倍,可是会占用很多其它的内存空间.Android有三种执行模式:JNI.Dalv ...
- Android提高UI性能技巧
提高UI性能的方法事实上有非常多在实际的开发中都已经用到了,在此做一下总结. 1.降低主线程的堵塞时间 若一个操作的耗时较长(超过5秒),我们应该将其放入后台线程中运行.仅仅在须要改动UI界面时通知主 ...
- 关于新一代Android的一切Android L (2014-07-04)
谷歌在今年的I/O大会上一改曾经的传统,由发布新版Android改为发布Android L的开发者预览版本,而其正式版本将会在今年秋天面世,这种方式将会方便开发者在正式版发布之前尽早对自己应用进行优化 ...
- Chromium Graphics: Android L平台上WebView的变化及其对浏览器厂商的影响分析
原创文章.转载请以链接形式注明原始出处为http://blog.csdn.net/hongbomin/article/details/40799167. 摘要:Google近期公布的Android L ...
- ANDROID L——Material Design详解(UI控件)
转载请注明本文出自大苞米的博客(http://blog.csdn.net/a396901990),谢谢支持! Android L: Google已经确认Android L就是Android Lolli ...
- Android开发周报:Android L默认加密用户数据
Android开发周报:Android L默认加密用户数据 新闻 <iCloud前车之鉴,Android L默认开启加密功能>:iCloud 艳照风波再起,第二波女星照片流出,大量女星的裸 ...
- 浅谈新一代Android操作系统Android L
今天早一些的时候,Google公布了新一代Android操作系统Android L.让我很意外的是命名规则的变化,之前外界纷纷推測会叫Android5.0,同一时候会给一个甜品的名字命名.由于Andr ...
- Android:What is ART?
背景:Android4.2之前,安卓手机系统的应用程序均在Dalvik Java的虚拟机上执行,这样的执行模式还要依靠一个编译器来实现与应用程序的沟通.应用程序每次执行时,都须要将程序内的代码转变为机 ...
随机推荐
- 【Python】 最简单的web服务
python -m SimpleHTTPServer 8321 1.python 没有指定目录的参数 想启动目录 就cd到该目录下 2.在目录下创建一个index.html 3.启动web服务,(端 ...
- 使用JAXP进行sax解析
package cn.liuning.sax; import javax.xml.parsers.SAXParser; import javax.xml.parsers.SAXParserFactor ...
- 7zip 命令行
转自 http://www.cnblogs.com/langlang/archive/2010/12/01/1893866.html 7z.exe 是 7-Zip 的命令行版本.7z.exe 使用 7 ...
- Codeforces Round #327 (Div. 2) E. Three States
题目链接: 题目 E. Three States time limit per test:5 seconds memory limit per test:512 megabytes 问题描述 The ...
- hihocoder #1300 : 展胜地的鲤鱼旗 dp
题目链接: http://hihocoder.com/problemset/problem/1300 题解: 先用栈预处理出每个‘)’匹配的‘(’的位子,放在pos数组中. dp[i]表示以i结尾的合 ...
- bzoj 1295: [SCOI2009]最长距离 暴力+bfs最短路
题目链接: http://www.lydsy.com/JudgeOnline/problem.php?id=1295 题解: 对每个点暴力跑一遍bfs,看能够到达的最远位置,这里如果有障碍物则距离为1 ...
- 【BZOJ】【2194】快速傅里叶之二
FFT c[k]=sigma a[i]*b[i-k] 这个形式不好搞…… 而我们熟悉的卷积的形式是这样的 c[k]=sigma a[i]*b[k-i]也就是[下标之和是定值] 所以我们将a数组反转一下 ...
- 解决asp.net mvc中*.resx资源文件访问报错
个人笔记 问题重现 在asp.net mvc中,使用资源文件会出现一个问题,例如: 紧接着我进入视图界面,输入下面代码: <a href="javascript:void(0);&qu ...
- 【设计模式六大原则6】开闭原则(Open Close Principle)
定义:一个软件实体如类.模块和函数应该对扩展开放,对修改关闭. 问题由来:在软件的生命周期内,因为变化.升级和维护等原因需要对软件原有代码进行修改时,可能会给旧代码中引入错误,也可能会使我们不得不 ...
- POJ3126Prime Path
http://poj.org/problem?id=3126 题意 : 给你两个四位数,都是素数,一个是初始素数x,一个是目标素数y,让你从x变成y,x每次只能改变1位数,来变成另外一个素数k,再改变 ...