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

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

3天内不再提示

华为方舟编译器的五大优势

454398 来源:工程师吴畏 2019-06-14 09:50 次阅读

在今年发布P30的时候,华为还发布了一个名为“方舟”的编译器,但是很多人对方舟到底是什么其实有误解,这里我们就来详细说说。可以肯定的是,方舟并不是单独操作系统!而是安卓上的工具。

方舟编译器的优势可以总结为以下五点:

1、安卓程序编译效果更好;

2、安卓程序安装速度更快;

3、安卓程序运行速度更快;

4、系统垃圾随用随清,对手机硬件的依赖降低;

5、省电、省电、省电,重要的事情说三遍

安卓与Java

从一开始到现在,安卓的程序大多数都是Java(也有C语言)编写的,关于Java无需多言,是世界上最强大的计算机语言之一。

但是懂得计算机原理的都知道,计算机的CPU,只接受汇编命令。那么怎么才能让CPU去理解Java语言的程序呢?

华为方舟编译器的五大优势

左边是JAVA程序代码,有边是汇编代码

如果使用一个中间层,把Java解释成汇编语言,充当一个“翻译”的角色,那么就变成了Java程序说一句,它解释一句,这么做显然效率太低。

那么能不能把Java直接变成机器能动的汇编代码?

可以,有两种办法,一种是在程序执行之前就编译好的模式,这种称之为Ahead of time,简称AOT;另外一种办法则是程序运行起来之后再编译,称之为Just in time,JIT。

早期安卓

在安卓的早期时代,也就是安卓5.0以前,安卓手机有卡、慢、顿的毛病,为用户所诟病。

为什么?归根结底是因为当时的安卓使用的是中间层+JIT的垃圾模式,这种机制下就快不了,而且当时垃圾回收也成问题,本来就慢,越用越慢,笔者当时用的Nexus4就是安卓4.2版本,由于是源生系统,还稍微好一点点。而且这种办法还废电。

nexus由于是源生系统,所以比国内手机厂加壳的各种UI还稍微快一点

在安卓5.0-6.0的时期,谷歌为安卓配置了ART(Android Runtime),这个时候是完全的AOT模式,但是它也有自己的问题。

因为是执行之前要编译好,所以安装的速度很慢并且非常占空间,要知道当时的手机64G都算容量大的,而且开机重启都要执行一次AOT,所以这个速度巨慢,用户体验也很差。这也是为何从前两年开始,安卓手机的内存和容量越来越大。

现在的安卓

安卓7.0之后,谷歌也意识到了程序占地方、开机慢的问题,怎么办?

谷歌发现,人们使用一个程序,不可能用所有的功能。那么只编译一部分常用的是不是就效率高了呢?

所以这时候其实是把JIT又拉回到安卓上来,并且安装的时候也不用全编译,直接装就是了,速度当然快了。

这其实就是中间层、JIT、AOT一起来,并且根据用户的习惯,把它常用的程序的常用功能代码解释好了存起来,用户再用也飞快。

在安卓7.0以后,谷歌做的事情就是优化。8.0的系统是做了一个解释器,提升了“冷代码”的解释速度。

最新的10.0(Android Q)系统,甚至会在安装的时候,就预先知道这个程序什么是用户常用的代码,安装时间稍微长一点,但是热代码已经解释好了,进一步提升速度。

华为方舟优化了什么?

看上文我们知道了谷歌的方案其实是大杂烩。那么华为做的是什么呢?

其实华为的牛X之处在于直接进入到安卓的灵魂深处,从程序开发开始到打包好的APK,直接就是手机CPU可以理解的汇编指令(二进制码),这提升效率。

在方舟编译器里面,已经编译好的APK,会通过静态编译的方式先转换成机器码再安装,这其实是AOT,无需麻烦的虚拟机,提升运行速度和效率。

并且作为开发者,还可以根据不同的程序特点,选择不同的编译优化方案,不像安卓官方的方式使用统一的虚拟机方案。

现在安卓手机的一大特色就是内存越来越大,6GB都是老人机的配置了。

这除了程序大以外还有安卓的程序运行产生垃圾多有关系。那么清理垃圾呢?则需要暂停程序,也就会顿一下,即所谓的“卡”。

华为方舟编译器则是利用程序多线程运行的特点。打个比方,您现在正在用的“中关村在线”这个APP用了AB两个线程,在华为的P30手机中,那么线程A运行的时候,B在清理垃圾,然后A线程清理垃圾的时候B线程在运行,程序运行不中断,垃圾处理不停,做到了又连贯、又节约系统资源。

华为的另外一个伟大之处在于绝不藏私!今年8月,华为就将公开方舟编译器的源代码,到时候一定会有很多手机厂开始使用高效、节约资源的方舟编译器,给我买带来更好的手机使用体验!

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

    关注

    215

    文章

    33616

    浏览量

    247135
  • 编译器
    +关注

    关注

    1

    文章

    1576

    浏览量

    48610
  • 方舟编译器
    +关注

    关注

    0

    文章

    60

    浏览量

    156
收藏 人收藏

    评论

    相关推荐

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

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

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

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

    Triton编译器的原理和性能

    为Torch inductor的基本组件,以合成针对GPU的高效内核。与传统库使用相比,这具有多种优势。它允许创建各种各样的融合,它可以独立调整,并且它的内存占用更小。本次演讲将介绍Triton编译器,并描述使其能够以最少的用户努力生成闪电般快速内核的过程。
    的头像 发表于 12-16 11:22 1057次阅读
    Triton<b class='flag-5'>编译器</b>的原理和性能

    编译器的优化选项

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

    新版编译器的设计思路和优化方法

    小程序编译器在小程序开发、预览、发布各个阶段都需要使用,因此编译器性能会直接影响到开发者开发效率,也会影响到开发者工具的使用体验。 由于旧版的编译器(基于 webpack4)在构建大型项目时会很慢,内存占用也高,一直被开发者吐槽
    发表于 10-13 11:21 149次阅读
    新版<b class='flag-5'>编译器</b>的设计思路和优化方法

    嵌入式开发中的C语言编译器设置

    编译器的语义检查很弱小,甚至还会“掩盖”错误。现代的编译器设计是件浩瀚的工程,为了让编译器设计简单一些,目前几乎所有编译器的语义检查都比较弱小。为了获得更快的执行效率,C语言被设计的足
    发表于 10-11 12:43 277次阅读

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

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

    esp32除了用arduino编译器还可以用哪个编译器

    esp32除了用arduino编译器还可以用哪个编译器
    发表于 09-25 06:13

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

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

    如何安装ARM编译器Linux版

    本教程介绍如何下载、安装、设置您的环境,以及如何开始使用ARM编译器for Linux。 ARM编译器Linux版软件包包括ARM C/C++编译器、ARM Fortran编译器和AR
    发表于 08-28 06:45

    编译器的标准生命周期

    编译器的标准生命周期
    发表于 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 3653次阅读

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

    演讲嘉宾 | 曾建江 回顾整理 | 廖   涛 排版校对 | 李萍萍     嘉宾简介 曾建江,亚琛工业大学博士,华为毕昇编译器首席架构师、芯片软件协同设计部部长,拥有多年编译器与芯片软件协同
    的头像 发表于 05-05 15:46 1127次阅读
    峰会回顾第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>用户手册