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

    文章

    34268

    浏览量

    251053
  • 编译器
    +关注

    关注

    1

    文章

    1617

    浏览量

    49021
  • 安卓
    +关注

    关注

    5

    文章

    2118

    浏览量

    56970
  • 鸿蒙系统
    +关注

    关注

    183

    文章

    2634

    浏览量

    66180
  • 方舟编译器
    +关注

    关注

    0

    文章

    60

    浏览量

    181
收藏 人收藏

    评论

    相关推荐

    C7000优化C/C++编译器

    电子发烧友网站提供《C7000优化C/C++编译器.pdf》资料免费下载
    发表于 10-30 09:45 0次下载
    C7000优化C/C++<b class='flag-5'>编译器</b>

    Keil编译器优化方法

    我们都知道,代码是可以通过编译器优化的,有的时候,为了提高运行速度或者减少代码尺寸,会开启优化选项。
    的头像 发表于 10-23 16:35 282次阅读
    Keil<b class='flag-5'>编译器</b>优化方法

    AI编译器技术剖析

    随着人工智能技术的飞速发展,AI编译器作为一种新兴的编译技术逐渐进入人们的视野。AI编译器不仅具备传统编译器的功能,如将高级语言编写的源代码转换为机器可执行的代码,还融入了人工智能技术
    的头像 发表于 07-17 18:28 1418次阅读

    人工智能编译器与传统编译器的区别

    人工智能编译器(AI编译器)与传统编译器在多个方面存在显著的差异。这些差异主要体现在设计目标、功能特性、优化策略、适用范围以及技术复杂性等方面。以下是对两者区别的详细探讨,旨在全面解析
    的头像 发表于 07-17 18:19 1646次阅读

    深度学习编译器和推理引擎的区别

    深度学习编译器和推理引擎在人工智能领域中都扮演着至关重要的角色,但它们各自的功能、应用场景以及优化目标等方面存在显著的差异。以下是对两者区别的详细探讨。
    的头像 发表于 07-17 18:12 1180次阅读

    Meta发布基于Code Llama的LLM编译器

    近日,科技巨头Meta在其X平台上正式宣布推出了一款革命性的LLM编译器,这一模型家族基于Meta Code Llama构建,并融合了先进的代码优化和编译器功能。LLM编译器的推出,标志着Meta在人工智能领域的又一重大突破,将
    的头像 发表于 06-29 17:54 1448次阅读

    SEGGER编译器优化和安全技术介绍 支持最新C和C++语言

    代码生成,SEGGER编译器生成非常小的代码,非常适合内存受限的环境,而不会牺牲执行速度。 2) 速度优化:在最高优化级别,SEGGER编译器生成尽可能的代码,确保您的应用程序以峰值性能运行
    的头像 发表于 06-04 15:31 1378次阅读
    SEGGER<b class='flag-5'>编译器</b>优化和安全技术介绍 支持最新C和C++语言

    C语言:嵌入式开发中的关键编译器角色

    嵌入式程序开发跟硬件密切相关,需要使用C语言来读写底层寄存、存取数据、控制硬件等,C语言和硬件之间由编译器来联系,一些C标准不支持的硬件特性操作,由编译器提供。
    发表于 04-26 14:53 522次阅读
    C语言:嵌入式开发中的关键<b class='flag-5'>编译器</b>角色

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

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

    QT开发学习笔记1(安装交叉编译器

    QT安装交叉编译器
    的头像 发表于 02-18 10:02 838次阅读
    QT开发学习笔记1(安装交叉<b class='flag-5'>编译器</b>)

    华为鸿蒙系统怎么样 华为鸿蒙系统和系统的区别

    和稳定性。与此同时,鸿蒙系统与系统在架构、功能和生态系统方面都存在一些区别和特点,下面将详细探讨这些方面的差异。 首先,华为鸿蒙系统在架构上与
    的头像 发表于 02-02 14:54 1608次阅读

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

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

    Triton编译器的原理和性能

    Triton是一种用于编写高效自定义深度学习原语的语言和编译器。Triton的目的是提供一个开源环境,以CUDA更高的生产力编写快速代码,但也其他现有DSL具有更大的灵活性。Triton已被采用
    的头像 发表于 12-16 11:22 2683次阅读
    Triton<b class='flag-5'>编译器</b>的原理和性能

    TVM编译器的整体架构和基本方法

    有将近两个月没有学习一些新东西,更新一下博客了。一直在忙公司的一个项目,是做一款支持LSTM和RNN的通用架构加速IP。自己恰好负责指令编译工作,虽然开始的指令比较粗糙,没有一套完整的编译器架构
    的头像 发表于 11-30 09:36 2255次阅读
    TVM<b class='flag-5'>编译器</b>的整体架构和基本方法

    编译器的优化选项

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