聚焦大模型浪潮下软件工程的创新洞见与实践 |QCon主题演讲大咖来袭 了解详情
写点什么

Android 将引入 AOT 编译器

  • 2014-07-14
  • 本文字数:1129 字

    阅读完需:约 4 分钟

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

2014-07-14 04:119149
用户头像

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

关注

评论

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

卫星通信,给手机市场带来了什么?

脑极体

云数据库技术行业动态@2022-09-30

数据库 数据复制 数据管理 数据备份 数据对比

iMazing传输 iPhone 备忘录和通话记录功能

淋雨

ios iphone

重磅发布!Orbit 云原生应用全生命周期管理工具上线啦!

CODING DevOps

云原生 Orbit CODING

面试官问我 JS 中 foreach 能不能跳出循环

茶无味的一天

JavaScript js foreach for

多维数据库中的高效计算机制

元年技术洞察

智能多维数据库 专利解析

使用WIX 进行商业智能OEM打包

葡萄城技术团队

国庆数字游,融云都为您准备好了

融云 RongCloud

分享|破世界纪录的OceanBase,如今入选了国际顶会VLDB 2022

OceanBase 数据库

葡萄城受邀参加WOT全球技术创新大会

葡萄城技术团队

还在为产品的客户服务而烦恼?来搭建在线客服中心!

Baklib

打破线上社交“不可能三角”,语音社交可以做到既要、又要、还要

擎声科技

音视频 sdk 语音社交 实时互动 擎声Qtt

Databricks Data Science&Engineering模块介绍

Jackchang234987

大数据 数据产品经理 数据产品 大数据开发 Databricks

zookeeper集群之间如何通讯

浅羽技术

zookeeper 通信 集群 ZooKeeper原理 9月月更

安利几款简单好用的帮助文档制作工具

Baklib

帮助文档

还不知道产品帮助中心怎样制作?,来看看这个吧

Baklib

产品的帮助中心怎么建设?关于编辑帮助文档的几个小技巧~

Baklib

字符串哈希

留白的艺术

大数据开发应用场景解读

Jackchang234987

大数据 数据开发

新品速递|海泰边缘安全网关护航工控数据采集

电子信息发烧客

ReactDOM.render在react源码中执行之后发生了什么?

flyzz177

React

NFTScan 与 PANews 在 NFT 数据层面进行战略合作

NFT Research

API NFT 合作 MetaMask

GPU是AI时代的算力核心

Finovy Cloud

人工智能 云渲染

【译】日志:每个软件工程师都应该了解实时数据的统一抽象【三】

Rae

kafka 日志 原理

好的代码是优质资产、莫让代码成为负债

葡萄城技术团队

给你一本武林秘籍,和KeeWiDB一起登顶高性能

腾讯云数据库

redis 腾讯云 NoSQL 数据库 腾讯云数据库 KeeWiDB

第56届世乒赛团体赛开幕!三思近900㎡ LED显示点燃赛事激情

电子信息发烧客

Alluxio与北京大学计算机学院签署合作框架协议,推动产学研深度融合

Alluxio

开源 云原生 产学研用 Alluxio 北京大学

Java: 压缩PDF文档

Geek_249eec

Java PDF 压缩

基于边缘计算的渲染新应用

火山引擎边缘云

边缘计算 渲染 边缘云 渲染性能 渲染服务

leetcode 513. Find Bottom Left Tree Value 找树左下角的值 (简单)

okokabcd

LeetCode 数据结构与算法

Android将引入AOT编译器_移动_Seth Cousins_InfoQ精选文章