BT

如何利用碎片时间提升技术认知与能力? 点击获取答案

Android将引入AOT编译器

| 作者 Seth Cousins 关注 0 他的粉丝 ,译者 曹知渊 关注 1 他的粉丝 发布于 2014年7月15日. 估计阅读时间: 3 分钟 | ArchSummit北京2018 共同探讨机器学习、信息安全、微服务治理的关键点

Google已经用一个AOT编译器替代了Android中的JIT编译器。这个AOT编译器可以在安装阶段把字节码转换成原生的机器码。

2014年的I/O大会上,Google发布了下一代Android操作系统,代号“L版本”,这个版本有一些重大的系统架构方面的修改,其中之一就是用一个全新的运行时库,就叫Anroid RunTime(ART)以及AOT编译器替代了Dalvik虚拟机和它的JIT编译器。

在不同的条件下,AOT和JIT编译策略具有不一样的优势和缺点。Google实现的ART保持了JIT编译策略对硬件的灵活性,同时调整了JIT对于空间和速度的取舍。这种AOT策略是针对Android使用的硬件平台优化的。其他移动平台针对它们的硬件和软件环境,会有不同的选择。

  • iOS主要依靠静态编译,在开发者的电脑上,构建过程会产生优化过的原生指令,然后直接上传这个应用。
  • Windows Phone使用云编译策略,安装时应用商店会先生成那些依赖于具体硬件的指令,然后再把应用安装到手机上。

这两种策略分别是这两家公司针对自己情况的最优选择,苹果紧紧地控制着硬件生态系统,而微软的系统则有着五花八门的硬件执行环境。

在这个新的Android运行时库的实现中,操作系统在应用安装的时候,直接在设备上把字节码转换成机器码,并把这些原生的指令存储起来,以备今后使用。无论是在永久存储区域还是内存方面,这份原生指令都会占更大的空间。和Dalvik加传统的JIT编译器相反,每次应用执行的时候不需要重复这个编译过程。

但ART也丧失了JIT编译的一个关键优势:在手机、平板电脑或其他设备上安装应用程序的时候,操作系统只有知道底下运行的硬件细节,才能把应用转换成原生的机器码。它知道硬件是不会变的,所以才能针对这种硬件产生最优的指令。这和静态编译器形成了鲜明的对比,静态编译器通常不会针对特定的处理器做优化,也不会为不同的处理器产生多份指令。

Google声称ART总体上能把性能提高到Dalvik的200%,这部分是因为AOT编译器对指令的全貌有一个概览,而JIT编译器只执行本地优化。Andre Frumusanu在为AnandTech网站写的文章中指出“异常检查等带来的开销大大减少,方法和接口调用的速度极大地提升了”。

因为ART编译出来的是一个ELF可执行文件,所以内核可以管理它的代码页——这个结果可能会大大改进内存管理,并且降低内存使用。

Android L现在有一个开发者预览版,正式版预计将在秋天发布,所以最终能提升到什么程度,以及是否会有更多的取舍,还要拭目以待。这个版本在通用的编译方面看起来并没有多大进步,Google对此并没有什么新计划,也没有在跟踪这件事。随着硬件功能的不断进步,Google不断关注的是针对Android特定硬件的优化编译策略。

参考原文链接:http://www.infoq.com/news/2014/07/ahead-of-time-compiler-os

评价本文

专业度
风格

您好,朋友!

您需要 注册一个InfoQ账号 或者 才能进行评论。在您完成注册后还需要进行一些设置。

获得来自InfoQ的更多体验。

告诉我们您的想法

允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p

当有人回复此评论时请E-mail通知我

翻译错误 by matthew iou90

但ART也丧失了JIT编译的一个关键优势

这里原文意思明明是保留吧=.=

允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p

当有人回复此评论时请E-mail通知我

允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p

当有人回复此评论时请E-mail通知我

1 讨论

登陆InfoQ,与你最关心的话题互动。


找回密码....

Follow

关注你最喜爱的话题和作者

快速浏览网站内你所感兴趣话题的精选内容。

Like

内容自由定制

选择想要阅读的主题和喜爱的作者定制自己的新闻源。

Notifications

获取更新

设置通知机制以获取内容更新对您而言是否重要

BT