50万奖金+官方证书,深圳国际金融科技大赛正式启动,点击报名 了解详情
写点什么

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

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

关注

评论

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

一文搞明白Redis中两种持久化机制RDB和AOF

jiangxl

redis'

浅谈云上攻防——Etcd风险剖析

腾讯安全云鼎实验室

安全攻防 网络安全

Android C++系列:函数知识知多少

轻口味

c++ android 4月月更

美好教育,无处不在 | 拓维信息携手开鸿智谷重磅发布教育在鸿OS发行版

拓维信息

操作系统 OpenHarmony OpenHarmony 3.1 Release

OpenHarmony应用开发之全局配置参数解析

Anna

OpenHarmony

了解HTTP的基本历史及知识

CRMEB

OpenHarmony啃论文计划-elf文件格式介绍

Anna

OpenHarmony

2020年Java面试复盘,收获Offer,金三银四程序员面试精装版pdf,分享给跳槽面试的程序员

爱好编程进阶

Java 程序员 后端开发

浅谈C#可变参数params

yi念之间

C# params

web前端培训懒加载对 Web 性能的影响

@零度

前端开发 懒加载

怎么写帮助文档?产品人看过来

小炮

帮助中心

java培训Stream遍历树形结构案例分享

@零度

stream JAVA开发

谈谈对 Database Plus 认识与畅想

SphereEx

Apache 数据库 SphereEx ShaardingSphere

为什么boolean存储需要32bit?

程序员猪小哼

java基础 底层原理

「质量三人行之不止测试」直播问题解答

BY林子

软件测试 职业发展 质量赋能 测试转型 质量内建

金蝶云·苍穹峰会震撼来袭

金蝶云·苍穹

Redis主从复制集群及数据异常丢失恢复思路

jiangxl

redis'

新冠疫情防控背后有哪些鲜为人知的技术?

DS小龙哥

4月月更

深度剖析OpenHarmony应用/服务的逻辑结构

Anna

OpenHarmony

【直播回顾】OpenHarmony知识赋能第五期第二课——成为社区达人

OpenHarmony开发者

OpenHarmony 社区贡献

架构实战营作业四

热猫

大数据培训Hive架构思想与设计原理

@零度

hive 大数据开发

我推荐的Flutter项目结构

坚果

4月月更

13 高可用的服务

爱好编程进阶

Java 程序员 后端开发

浅谈C#字符串构建利器StringBuilder

yi念之间

C# StringBuilder

OpenHarmony技术日探讨教育发展,聚焦开源人才培养

OpenHarmony开发者

OpenHarmony

密码基础设施提供商三未信安加入龙蜥社区

OpenAnolis小助手

合作伙伴 龙蜥社区 CLA 三未信安 密码基础设施

关于「应变力」这个超能力|ONES 人物

万事ONES

管理

《SQL必知必会》读书笔记

懒时小窝

数据库 sql

OpenHarmony 设备开发环境搭建 / 源码获取 / 编译 / 烧录

Anna

OpenHarmony

编码的底层原理

程序员猪小哼

java面试 底层原理 死磕 Java 基础

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