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

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

3天内不再提示

方舟编译器让安卓系统运行速度大幅度提升,甚至可以媲美iOS

rEOY_bjx_zndw 来源:陈年丽 2019-08-15 10:27 次阅读

在经历美国全力打压和封锁近半年之后,华为反而爆发出了让所有人瞩目的实力。特别是近来,华为接连发布的经过十年布局研发的方舟编译器和鸿蒙操作系统,再次让外界见识到了华为真正的实力。虽然作为未来华为万物互联的基础,鸿蒙操作系统显然更重要,但毕竟鸿蒙系统还需要一段时间进行生态布局,和技术迭代来完善和适配。而方舟编译器作为华为软件生态的重要一环,在当下就显得非常重要了。

而方舟编译器在发布之时,就宣称一旦把安卓系统和应用重新用方舟编译器编译之后,安卓系统的运行速度将大幅提升,甚至将可以媲美iOS。特别是华为还宣布方舟编译器将完全开源。如果方舟编译器真能做到宣传中的效果,毫无疑问,一旦方舟开源,必将有大批的开发者汇聚于此,使用方舟重新编译自己的应用。而方舟编译过的程序,将可以在鸿蒙上完美适配。因此只要方舟编译器表现良好,那就会变成鸿蒙系统生态的吸粉神器。

那么方舟编译器能否做到宣称的彻底改良Android呢。首先我们先来看一下到底有哪些因素,导致Android天生就跑不过iOS。首先一点,其实Android就是用Java编写的一个叠加在底层Linux内核之上的运行在用户空间的大型用户程序。并且Android把底层Linux系统的各种功能都包装成了各种各样的服务,而各种应用程序就可以通过调用Android提供的这些服务调用底层linux的各种功能,从而实现用户的各种需求,如打游戏,看视频等等。

也因此Android天生就继承了java的各种优缺点。优点是Java的兼容性,可以全平台使用。但缺点也因此而来,正是因为Java为了能全平台使用,因此使用了虚拟机概念来屏蔽底层硬件的区别。因为Android也是跑在虚拟机上的。虽然谷歌为了提高性能,在Android迭代时,更换了不同版本的虚拟机,但毕竟虚拟机还在。这就意味着,Android的应用程序在运行时,必须要先经过虚拟机的解释,才能让底层的Linux再执行。这就大大拖累了Android的运行速度。

而且由于底层Linux系统是用C语言编写的,而Android及其应用都是用Java编写的。因此当用户使用应用程序想使用一个功能,那么就必须从Android系统的Java调用这个功能的接口转换成底层Linux系统的C语言调用接口。而这有需要JNI来完成从java接口到C接口的转换,又要拖慢一点时间。而且对于Android来说,如果内存占用过高(如打开的应用太多)时,会执行一个叫做GC的内存回收工具,进行内存碎片回收。但是要命的是,GC在执行时会停止所有的程序运行,直到清理完毕。这也是为何Android手机为什么一直在大幅增加内存容量,就是为了尽量减少GC的运行次数。

而华为的方舟编译器就一举解决了这几个困扰业界多年的难题。通过将java/c/c++代码统一编译,彻底解决了以往安卓必须依赖的JNI和虚拟机。而又通过引用计数法进行内存实时回收,避免了GC的系统卡顿。因此方舟编译器才敢宣称能大幅提升Android及其应用的运行速度。

说来简单,但要知道方舟编译器做到了业界自Java 1995年问世以来,一直依赖虚拟机,几十年未变的框架。也是第一个真正能做到Java/C/C++代码能够直接混合成机器码的编译器。可以说,有了方舟编译器,华为才真正的有可能构建起自己的生态。现在广大程序员,都在期盼着华为尽早开放方舟编译器的源码。正如Linux之父,程序员之神Linus说的:Talk is cheap, Show me the code。

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

    关注

    215

    文章

    33610

    浏览量

    247132
  • 编译器
    +关注

    关注

    1

    文章

    1576

    浏览量

    48606
  • 鸿蒙
    +关注

    关注

    55

    文章

    1613

    浏览量

    42115
  • 方舟编译器
    +关注

    关注

    0

    文章

    60

    浏览量

    156

原文标题:国网节能公司面向国家电网系统内外公开招聘65人!

文章出处:【微信号:bjx-zndw,微信公众号:北极星智能电网在线】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

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

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

    MCU可以正常工作但是端口输入脉冲信号后,读值不准确大幅度变化是为什么?

    MCU还可以正常工作但是端口输入脉冲信号后,读值不准确大幅度变化,之前是好的,这是为啥呢,是MCU坏了吗
    发表于 02-20 07:09

    ​纳思达MSCI ESG评级获得较大幅度提升

          秉承环保理念    践行社会责任   -纳思达股份有限公司- 纳思达MSCI ESG评级 获得较大幅度提升 日前,国际权威指数公司MSCI(MorganStanley Capital
    的头像 发表于 12-26 09:53 188次阅读
    ​纳思达MSCI ESG评级获得较<b class='flag-5'>大幅度</b><b class='flag-5'>提升</b>

    AD7746采样1000多个点后用matlab稍微处理了下,数据一直很大幅度波动是怎么回事?

    1000多个点后用matlab稍微处理了下,数据一直很大幅度波动。Y轴表示的是读出数据转换成十进制的值,为了方便画图,跟研究震动情况,整体减掉了最少值。现在真心不解出了什么情况,为什么结果会是这样的,是我的AD7746芯片坏了吗?
    发表于 12-25 07:30

    编译器的优化选项

    这一点,需要了解编译器的能力和限制;第三,要了解硬件的运行方式,针对硬件特性进行优化。本文着重展开第二点和第三点。 简单认识编译器 要写出高性能的代码,首先需要对编译器有基础的了解,原
    的头像 发表于 11-24 15:37 405次阅读
    <b class='flag-5'>编译器</b>的优化选项

    请问使用NRF通信影不影响程序运行速度

    使用NRF通信影不影响程序运行速度
    发表于 11-06 08:07

    如何加快32的运行速度

    如何会加快32的运行速度
    发表于 11-06 07:58

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

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

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

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

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

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

    影响交叉导轨运行速度的因素有哪些?

    影响交叉导轨运行速度的因素有哪些?
    的头像 发表于 08-24 17:56 488次阅读
    影响交叉导轨<b class='flag-5'>运行速度</b>的因素有哪些?

    【芒果派MangoPi MQ Quad】10系统体验

    /phoenixcard4.2.8.zip 一、打开系统烧写工具 二.系统启动 把TF卡插入卡槽, 将mini hdmi转接线插入开发板和显示
    发表于 07-07 21:59

    使用Arduino IDE编译器指令的疑问求解

    ,ESP 的 32 位 CPU 可以 从其内部 ram(并行且快速)运行代码 或者它可以被告知从板上运行速度更慢但更大的串行闪存芯片中运行
    发表于 06-12 07:01

    CA850 Ver.3.20 C编译器运行

    CA850 Ver.3.20 C编译器运行
    发表于 05-04 19:03 0次下载
    CA850 Ver.3.20 C<b class='flag-5'>编译器</b><b class='flag-5'>运行</b>包

    CC78K0R Ver.2.00 C编译器运行

    CC78K0R Ver.2.00 C编译器运行
    发表于 04-28 19:11 0次下载
    CC78K0R Ver.2.00 C<b class='flag-5'>编译器</b><b class='flag-5'>运行</b>