0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

华为方舟编译器详细解读 真的比安卓快吗

454398 来源:工程师吴畏 2019-08-12 08:58 次阅读

8 月 9 日,华为开发者大会鸿蒙OS正式发布,这是基于微内核的全场景分布式OS。能实现模块化解耦,对应不同设备(智慧屏、穿戴设备、车机、智能音箱手机)可弹性部署。华为消费者业务 CEO 余承东描述了华为鸿蒙 OS 的方方面面。

余承东称,华为方舟编译器,会通过多终端 IDE 开发环境来支撑当前的鸿蒙 OS。目前方舟编译器支撑鸿蒙内核,“方舟编译器能提升60%的编译性能”,将来鸿蒙微内核能按需扩展,并希望用一个鸿蒙微内核代替全部内核。

今天,我们就聚焦华为的新贵——方舟编译器,这个一发布就引起巨大响动的底层核心技术。方舟编译器究竟是什么?它为什么能够做到“青出于蓝而胜于蓝”,下面就让我们带着疑问去解读。

01 编译器是什么?

首先讲讲编译器是什么东西吧?其实绝大多数用户都不清楚这是什么。程序员们在写好应用的代码之后,在变成我们手机上安装的应用之前,还差最后一步就是编译。

简单来说,编译器就是把编程人员开发的高级语言程序,翻译成机器可执行的机器指令,这就是编译器。它就像一位翻译官,是连接程序员与机器的桥梁。

由此来看,方舟编译器面向的是开发者的,但最终受益的还是消费者。

打个比方,说计算机是汽车,那么软件就像汽车的操控系统一样。编译器则是汽车发动机里最核心的汽油燃烧技术,将软件变成计算机的动力,其编译的效率,直接决定了用户的使用体验。所以了解方舟编译器之前,我们必须得首先了解 Android 操作系统中的编译器的运行机制。

安卓系统从2008年1.0到9.0,截至目前安卓系统大小版本超过15个。十年发展安卓手机的体验已经今非昔比。可生活中还有很多人诟病安卓手机没有iPhone流畅,那么安卓系统的程序是怎样运行的?下面我们来阐述一下

Java的虚拟机的故事

Android 1.0刚发布的时候,使用的是一个叫Dalvik的虚拟机(Virtual Machine,简称 VM)里面集成了一个解释器,每次用户在安卓手机上运行APP时,就会唤醒解释器,来给安卓的硬件解释APP接下来要干什么。

这个问题严重拖了安卓手机的后腿,所以Android2.2版本引入了JIT机制。JIT比较聪明,当用户在安卓手机运行APP时,会同时将用户经常使用的功能编译为机器能直接执行的机器码,不用一句一句去翻译。当出现不常用的功能时,再唤醒解释器翻译。

但是每次启动APP都要重新编译一次,加上Dalvik虚拟机性能比较落后,所以谷歌在Android 5.0版本将虚拟机从Dalvik替代成ART,同时把JIT的编译器替代成AOT 。AOT相比JIT的好处,就是不用每次打开APP都需要先编译一遍。但是,坏处是安装应用慢和占用内存空间。

在 Android 5.0 正式采用 ART 之前,Android 采用的是解释执行+JIT 的方式执行 Java 代码。在这个阶段的系统是“边解释边执行”模式,代码效率比较低下,当时Android给人的感觉就是卡。

目前的Android采用的是解释执行+JIT+AOT 的模式,但并没有摆脱一个前提,即应用在被打包成APK的时候,采用的还是Java代码。

JNI接口调度占用额外资源

现在大部分应用都是使用Java和C/C++等多种语言混合开发而成。Java和C/C++属于两种不同架构的语言,为了使APP正常运行,它俩之间需要互通的接口——JNI。

这就意味着手机硬件资源要分配一部分给JNI去做调度。不仅占用了硬件资源,而且这种机制本身就效率较低。

安卓内存回收机制容易造成卡顿

当手机内存资源不够用的时候,安卓虚拟机就会召唤GC(Garbage Collection),让所有手机运行的Java线程全部暂停,GC机制,无法精确控制内存回收,所以性能较差的手机间歇的出现“抽搐般”的卡顿现象。

以上这几个问题,一直影响着安卓手机的体验。其中最主要的是Java 高级语言转换机器能懂的语言,这一转换过程直接导致了Android的卡顿。反观iOS系统,直接使用Clang/LLVM来编译出机器码,就没有安卓还要一个中间层,也因为如此,我们感觉iOS系统一般更流畅。

02 方舟编译器牛在哪? “干掉”虚拟机

方舟编译器做的就是,将Java的所有语句统统翻译成机器码,最后打包成APK安装文件。方舟编译器最大的优势在于它绕过了虚拟机。简单来说,方舟编译器可以将高级语言(Java)直接变成机器码,无需再通过 Android 系统中内置的编译器。

总之,方舟编译器是完全替代了语言虚拟机的静态编译器,从此不再需要解释器。相比现有的编译机制有以下明显优势:

1、方舟编译器是一种静态的编译方式,而现有的安卓系统,运行一个应用程序首先启动虚拟机,然后读入应用代码逐条解释执行,无法做到100%做到摆脱虚拟机,这也是当前安卓阵营面临的问题。

简单一句话,只要是经过编译器编译的应用,在应用市场上架以后,用户下载的APK 就是编译好的了,方舟编译的应用在开发阶段就已完成了。

2、华为方舟编译器的静态编译方式可将语言里的动态特性直接翻译成机器码,手机安装应用程序后可全速运行程序,彻底干掉了虚拟机,极大提升了系统运行效率。

方舟编译器对于系统在这方面的提升,官方曾这样描述:

一、EMUI 9.1对系统主要服务System Server进行静态编译化,带来了系统流畅度提升24%,系统响应性能提升44%以上的收益。

二、微博极速版实现了静态化编译后,流畅度提升高达60%。通过上方演示视频来看,经过方舟编译优化的APP,在流畅度度方面的提升很明显。

03 新的内存垃圾回收机制

此外,方舟编译器还带来了新的系统垃圾回收机制。以往安卓的垃圾回收机制是集中回收,由于Java虚拟机的特点,系统会不停的地自动回收内存垃圾,保证内存不会溢出。

更要命的是,当内存低于某个标准值后,它就会自动杀掉优先级低的进程。系统会集中关闭被标记的多余进程,这就造成了随机性的卡顿。相信大家遇到过这种情况,启动游戏时,点按应用瞬间进入前会感觉莫名的卡顿,界面像是迟钝了一下。

而方舟编译器在这方面有什么不同,它的内存回收机制是随用随回收,回收时不需要暂停应用,而是直接回收内存垃圾,这大大提高了系统运行速度和效率。

小结:方舟编译器的优势,可以简单总结为以下五个方面:

1.安卓程序编译效果更好

2.安卓应用安装速度更快

3.APP运行速度更快

4.系统内存垃圾随用随清,对手机硬件的要求降低

5.省电

04 十年造方舟,为安卓提速为真,支撑鸿蒙也为实

十年磨一剑,没错,华为方舟编译器准备了十年之久。2009年,华为启动5G基础技术研究的同时,开始创建编译组,第一批海内外研究人员加入。

2013年,华为推出面向基站领域的自研编译器HCC,并正式提出编译器框架构想。

2014年,众多海内外专家加入华为,方舟项目正式启动。同时,编译器领域的顶级大佬,周志德(Fred Chow)的加入大大增强了研发实力

2016年,成立编译器与编程语言实验室。2019年,华为方舟编译器正式面世!

方舟编译器既能统一适配安卓机器语言,自然也能适配成自家系统的机器语言——鸿蒙OS,方舟编译器为“安卓提速”为真,但能“支撑鸿蒙”也为实,它完全可称为让开发者从安卓到鸿蒙过渡的“诺亚方舟”。

05对外开源 构建生态

据悉,方舟编译器也将开放给第三方合作伙伴。其后续会在 2019 年 11 月的绿盟开发者大会实现完整方舟编译器代码开源,让广大的应用开发者、手机厂商参与,共同构建开发者生态,使安卓体系变得更加完整强大。

未来方舟编译器是否能成功,还要看后续完整生态的搭建。希望开发者积极参与进来,最终给消费者带来更为极致的体验。

总结:

从方舟编译器我们就能看出华为对研发的投入,以及对未来生态搭建的规划,或许,想要做一个操作系统并不难,比如阿里云OS,但难的是未来完整生态的构建。

无论怎么看待华为,目前,在国内也只有它有实力去干这件事情,并不只是说说而已,华为的终极目标很明显,就是在未来搭建全方位的生态。我们期待这项技术能够普及开来,促进Android体系更加强大,也希望华为能在未来带给我们更多惊喜。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 华为
    +关注

    关注

    215

    文章

    33610

    浏览量

    247126
  • 编译器
    +关注

    关注

    1

    文章

    1576

    浏览量

    48606
  • 安卓
    +关注

    关注

    5

    文章

    2081

    浏览量

    54465
  • 鸿蒙系统
    +关注

    关注

    183

    文章

    2603

    浏览量

    65265
  • 方舟编译器
    +关注

    关注

    0

    文章

    60

    浏览量

    156
收藏 人收藏

    评论

    相关推荐

    纯血鸿蒙系统,拿什么与、iOS

    、数码、车载等等一系列生态闭环。 而华为鸿蒙是全栈自研底座,从AI大模型、AI框架、安全隐私、集成开发环境、设计系统、编程框体、编译器、编程语言和文件系统,到操作系统内核。去掉了传统的AOSP 代码
    发表于 02-21 21:04

    华为举办鸿蒙生态千帆启航仪式,余承东公布HarmonyOS NEXT开放申请

    据余承东介绍,为实现核心竞争力的突破,华为通过多年的努力构建出一套包含鸿蒙内核、ArkTS/仓颉编程语言、方舟编译器/毕昇编译器、ArkUI以及盘古AI大模型等在内的完整生态体系。
    的头像 发表于 01-19 09:34 309次阅读

    编译器的优化选项

    一个程序首先要保证正确性,在保证正确性的基础上,性能也是一个重要的考量。要编写高性能的程序,第一,必须选择合适的算法和数据结构;第二,应该编写编译器能够有效优化以转换成高效可执行代码的源代码,要做到
    的头像 发表于 11-24 15:37 405次阅读
    <b class='flag-5'>编译器</b>的优化选项

    OpenHarmony 的js引擎用的是方舟编译器

    OpenHarmony 的js引擎用的是方舟编译器吗?方舟编译器不是用来编译吗?
    发表于 10-09 09:32

    Keil修改ARM编译器及配置方法

    Keil MDK自 V5.36 版本之后,默认就不带 Arm Compiler V5版本编译器。如果需要使用 V5 版本编译器,就需要自己下载并安装。
    发表于 09-19 10:41 2165次阅读
    Keil修改ARM<b class='flag-5'>编译器</b>及配置方法

    ARM编译器优化版本1.0

    ARM编译器armcc可以优化您的代码以实现小代码和高性能。 本教程介绍了编译器执行的主要优化技术,并解释了如何控制编译器优化。 本教程假定您已经安装并许可了ARM DS-5 Development Studio。 有关
    发表于 08-28 07:11

    如何安装ARM编译器Linux版

    。 注意:ARM编译器Linux版运行在64位ARM硬件上,它不是交叉编译器。 有关兼容性的详细信息,请参阅支持的平台。
    发表于 08-28 06:45

    RealView用于BREW编译器和库的编译工具指南

    的一些功能,如Long Long,也是可用的。 ARM C++编译器期望C++符合国际标准化组织/国际电工委员会14822:1998年的C++国际标准。 有关ARM C++语言支持的详细说明,请参阅附录
    发表于 08-12 07:38

    如何使用ARM编译器构建Hello World

    在本教程中,我们将展示如何使用Arm构建一个名为hello_world.C的简单C程序DS-5中的编译器工具链。 您可以找到Arm编译器工具链的概述。本教程假定您已安装并获得Arm DS-5的许可。有关详细信息,请参阅获取从Ar
    发表于 08-08 07:55

    编译器的标准生命周期

    编译器的标准生命周期
    发表于 07-05 19:32 0次下载
    <b class='flag-5'>编译器</b>的标准生命周期

    Neuron 现场编译器用户指南

    Neuron 现场编译器用户指南
    发表于 07-04 20:47 0次下载
    Neuron 现场<b class='flag-5'>编译器</b>用户指南

    SDCC-Linux下的51 MCU编译器

    SDCC (小型设备C编译器)是为8位微控制器开发的免费C编译器。尽管兼容多种不同体系结构,但SDCC C编译器更适合8051内核。 SDCC是命令行固件开发工具,含预处理器、编译器
    的头像 发表于 06-16 15:19 3648次阅读

    深度学习编译器之Layerout Transform优化

    继续深度学习编译器的优化工作解读,本篇文章要介绍的是OneFlow系统中如何基于MLIR实现Layerout Transform。
    的头像 发表于 05-18 17:32 413次阅读

    峰会回顾第6期 | 毕昇编译器与OpenHarmony RISC-V生态的进展

    演讲嘉宾 | 曾建江 回顾整理 | 廖   涛 排版校对 | 李萍萍     嘉宾简介 曾建江,亚琛工业大学博士,华为毕昇编译器首席架构师、芯片软件协同设计部部长,拥有多年编译器与芯片软件协同
    的头像 发表于 05-05 15:46 1126次阅读
    峰会回顾第6期 | 毕昇<b class='flag-5'>编译器</b>与OpenHarmony RISC-V生态的进展

    R32C/100系列C编译器包V.1.01 C编译器用户手册

    R32C/100系列C编译器包V.1.01 C编译器用户手册
    发表于 04-28 19:54 1次下载
    R32C/100系列C<b class='flag-5'>编译器</b>包V.1.01 C<b class='flag-5'>编译器</b>用户手册