ART:Google 兑现了提升 Android 性能的承诺

产品

Android 下一个版本将会有两个重大改变。其中一个是明显的改变,系统界面采用全新的 Material Design,另一个改变属于底层部分,但是也直接影响到用户体验。Google 将彻底抛弃 Davik,启动新的应用环境 ART(Android Runtime)。ART 能否解决长期困扰 Android 的卡顿问题?AnandTech 网站对此进行了深入的分析。

架构

ART 完全兼容 Dalvik 的字节码格式 dex,因此,开发者编写软件不会受到影响,也无需担心兼容性问题。ART 的一大变化是,它不仅支持即时编译(JIT),而且支持预先编译(AOT)。在 Dalvik 上,每次软件运行,都需从字节码编译为原生代码,ART 可以只编译一次。然后,软件每次运行时,执行编译好的原生代码。预先编译也为新的优化带来了可能性。同时,这也会明显改善电池续航,因为软件运行时不用编译了,从而减少了 CPU 的使用频率,降低了能耗。

ART 也有一些缺点。其中一个是,设备首次启动,以及应用的首次启动时间会变长,不过,Google 宣称说,这种差别不是很大,而且他们会在这方面努力,使其接近甚至超过 Dalvik。另一个缺点是原生代码占用空间更大,不过,现在设备的空间应该都足够。

垃圾回收

Android 虚拟机是自动内存管理。优点是,开发者无需担心内存管理,缺点是,开发者失去了控制权,依赖于系统本身的机制。Dalvik 的垃圾回收机制是造成系统卡顿的原因之一。在 Dalvik 虚拟机下,启动垃圾回收机制会造成两次暂停(一次在遍历阶段,一次在标记阶段)。所谓暂停,就是应用的所有线程都不再执行。如果暂停时间过长,应用渲染中就会出现掉帧。用户体验上来说,就是应用运行的时候出现卡顿。

Google 宣称,Neuxs 5 的平均暂停时间是 54ms,结果就是,每次垃圾回收启动,平均掉帧是 4 帧。如果应用编写的不好,情况会更加糟糕。Anandtech 测试了 FIFA 游戏。Dalvik 环境下,启动应用的几秒内,垃圾回收启动 9 次,应用暂停时间总和 603ms,总共掉帧是 214 帧。在 ART 下,情况有了极大改善。同样时间里,应用暂停时间总和是 12.364ms(4 次前台垃圾回收,2 次后台垃圾回收),总共掉帧是 63 帧。

ART 能够做到这一点,是因为应用本身做了垃圾回收的一些工作。垃圾回收启动后,不再是两次暂停,而是一次暂停。在遍历阶段,应用不需要暂停,而标记阶段的暂停时间也大大缩短,因为 Google 使用了一种新技术(packard pre-cleaning),在暂停前就做了许多事情,减轻了暂停时的工作量。Google 承诺说,他们已经把平均暂停时间降到了 3ms,远远超过 Dalvik 的垃圾回收。

与此同时,Google 还改进了内存分配系统,把分配速度加快了 10 倍。垃圾回收算法也进行了修改,以增强用户体验,避免应用被打断。

64 位支持

ART 支持 64 位系统,这会带来性能上的提升,加密能力的大幅改进,同时保持与现有 32 位应用的兼容性。与苹果不同的是,Google 使用了指针压缩,以避免转换到 64 位后,空间占用大幅增加,其虚拟机仍然是 32 位指针。

Google 宣称,现有 Play Store 上应用中,85% 都可以转移到 64 位,剩下的 15% 有原生代码,需要重新编译。总的来说,转移到 64 位应该会在短时间内完成。

总结

从许多方面来说,Google 兑现了其提升性能的承诺,解决了困扰 Android 的诸多问题。Android 的一些致命弱点,原因在于非原生应用和自动内存管理系统,ART 在这些方面做出了大量改进。总之,在应用的流畅度和性能方面,Android 终于可以与 iOS 一决高下了。

图片来自 anandtech

分享
扫一扫分享到微信
登录,参与讨论前请先登录

评论在审核通过后将对所有人可见

正在加载中
爱范儿 App 下载二维码

爱范儿 App

爱范儿,让未来触手可及

爱范儿
APPSO
董车会
玩物志
爱范儿 公众号二维码

关注明日产品的数字潮牌