除了鸿蒙还有什么,除了鸿蒙OS,你别忘了华为这项秘密武器

0.jpeg

4f9a2b75bcb0491d6117239509f9ee15.png前两天,万众期待的鸿蒙 OS,终于在华为开发者大会上与世人见面了。

9e10ec2f91fd9ae13d7674b7e289c7f8.png

毕竟等待了这么久,千呼万唤始出来,大家对它都抱有 12 分的关注。

8559199535be41c194c6345814194a5d.png可机哥发现……

就在同一场发布会,还有个重磅程度不亚于鸿蒙 OS 的狠角色,却被很多人忽略。

在机哥看来,它对华为系统生态的发展,具有极其重大的战略意义。

f5e5ffd07f8a5e17bc1e9900874bf3c4.png而且当下对用户的影响甚至超过鸿蒙。

2b84bea02cf94f98b44a903b31d887da.png不卖关子,它就是——

方舟编译器

0f0db26a7b86448a2a496e90d5b89f4e.png

自打今年四月华为第一次对外宣布方舟编译器以来,大家总是能在各种场合听到这东西。

edf735b743449e789b0647653dd8874d.png但绝大多数人并不了解它到底是个啥。

机哥用尽可能大白话的方式给大家科普一下。

故事的开端要从安卓的老难题说起:

安卓的老难题

60a9975b29d402c64fd9788bb421221e.png

一直到现在,机哥还经常听到有人在选购手机的时候说:

“买安卓?不行不行,太卡了,我还是用苹果吧。”

15614fd47607fc17818e91aeef67fc1f.png以机哥多年的搞机经验来看,这句话绝对不是子虚乌有的污蔑,“卡顿”确实是困扰安卓好多年的难题。

特别是安卓 5.0 之前的版本,手机刚买来时还凑合,用的时间一久……

c785170fa4c75b449b8a8016485db3fe.png便出现滑动不流畅、掉帧。

dc7a1da04ae474bd824efaa28955296e.gif

0c279216de0df1280ab3e70eb06bf435.png应用启动加载慢就算了,有时候还假死。

4146d32597ccadd32d3076e070116f6f.gif

7b6271cc680d09dbcc9ff54461208202.png每每看到程序未响应,都让我回忆起曾经被 Windows 支配的恐惧。

安卓为什么会这样呢?

4ced82196471404065b572d3710d89a3.png原因有很多方面,机哥人认为最大的问题有三个。

作为六号线最会说人话的科技宅,机哥就不扯那些专业的术语,咱们打一个通俗易懂的比方来说明:

48f93ef4fb1890d6c1059a98020556c3.png假设今天机哥想读一本书,嗯,一本世界名着。

def658f6400140972673c21875ebda88.png

只不过,它是全英文的。

4f6ca6477bebda51e7cccce1be491d5a.png这时候机哥遇到了第一个问题:

我是个英语文盲,要想看懂这本书,该怎么办?

很简单,请一名翻译。

ade522a7feb53b006e54b6984355ec0e.png

只要翻译对着书,逐字逐句翻译成中文给我听,我就能懂了。

但是,速度很慢。

9f905332230cf2cc6fafa0c2e5192a72.png很快,机哥遇到了第二个问题:

这本名着里除了英文,偶尔还会出现其他语言,比如法语。

7dbbf2113e04efc718fa4864a0958536.png我的英语翻译不懂法语,读到这里就卡住了,怎么办呢?

办法是这样的,这名英语翻译有个懂法语的朋友,他打电话询问了那个朋友,帮忙翻译。

ff679ec422fe8212c77a890436f49ad3.png

恩,虽然最后我听懂了,但效率真的很低。

4ced82196471404065b572d3710d89a3.png最后,还有第三个问题:

8a6c434a0fd12b6824c4f5a478928110.png我会疲劳。

一次性听了几个章节后,累了咋办。

那只能停下来休息一会儿呗。

d67d7bc62818e66f007eb8c3a10fa863.gif

这样,我们又耽搁了一点时间。

8f9714db1766b6bc39b21e536cb70866.png注意,下面重点来了,我们把上面这个故事的要素替换一下:

英语=安卓的基础语言 Java;中文=机器能懂的语言;机哥=机器;翻译=把 Java 翻译成机器语言的“解释器”;法语=其他编程语言;疲劳=内存资源不够用。

7c5230b8783b451d44aa9eda14b21c48.png这个故事也就解释了安卓手机卡顿的三大原因:

首先是手机 CPU 听不懂 Java 语言,需要虚拟机的“解释器”,把 Java 字节码翻译成机器语言来运行,速度很慢。

其次是 Java 原生接口需要和 C/C++ 等其他语言的代码进行交互,造成额外的 JNI 开销,拖垮了效率。

8d84021a7c85fc0a36304d3af984e33e.png

最后是当内存不够用时,安卓虚拟机会采取 GC 内存回收机制,导致机器卡顿。

25c80bcb60e0d6c98d5be42db034a7a0.png

这么一说,安卓这是一身毛病啊,谷歌就没想过改善一下吗?

4443372d807b1e3448ccbd7266ab19a1.png事实上,他们做了不少努力。

谷歌为了解决卡顿曾经做过的事

机哥上面说了,安卓的虚拟机机制,需要把 Java 语言,翻译一道才能给机器运行。

5e9ac7dec8428197ca817d88c3b23a07.png效率低下不说,还特别吃硬件。

谷歌早就意识到这个问题,在 Android 2.2 中加入了一种叫做 JIT的机制。

JIT 意思是即时编译(Just in Time)。

6f24bc2ae17f98178f7f6007e1a232c4.png

放到机哥举的例子中就是:翻译者不再逐字逐句翻译,每次阅读的时候,他会把这个章节中的常见单词教会机哥。

3f6e19eabb5d4743c43bff4ae48b3711.png有了这样的基础,我的阅读效率提高了不少。

d7f49da3ad98516d448a70b5c1effbea.png但提升很有限。

于是从 Android 5.0 版本开始,谷歌又引入了一种叫做 AOT的新机制。

AOT 意思是提前编译(Ahead of Time)。

889e6c3cb866e0c4fa01a735cc378d67.png

相当于在机哥开始阅读这本书之前,翻译把这本书里的所有单词都先教给机哥了。

这解决了机哥阅读速度慢的问题,但又带来了新的问题。

b1b9727e9f9cfdb91ee6c1c992674715.png阅读之前,教单词费时间啊。

对应到手机中,就是每次安装一个应用、升级一个应用速度奇慢无比。

大家应该都记得当初安卓 5.0、6.0 那会儿,系统升个级,一堆应用排队优化,速度有多慢吧。

cb7c12439ac1b9846244a15b8a5c6f36.png

edf735b743449e789b0647653dd8874d.png所以到了 Android 7.0,谷歌把上面这些方法全都结合在了一起。

JIT + AOT + 解释器。

add39c7332ac3aa8cf3e67c5b10ba78d.png

运行的时候进行 JIT,并把编译好的机器码保存下来。

机器空闲的时候进行 AOT,如果两者都来不及,那再使用解释器。

所以,如今新版本的安卓,再也不会像以前那样卡顿。

到这里,安卓的运行模式达到了一个很好的平衡…………吗?

2f501981e2c5b9bc292c5721d1362b55.png然而并没有,无论谷歌怎么改进,虚拟机、解释器对硬件的占用依然存在。

这之中还有可以提升的余地。

ff1d9f88f5268f270cec8c4b51a6e127.png于是,华为出手了。

华为是怎么做的

华为思考问题的方式,果然是简单直接而有效。

efd77cd12f7f84245f90ebafd103af21.png我们把问题拉回到最开始。

当机哥拿起那本英文世界名着,一筹莫展的时候。

1e6294a53cb2341fc8dd256aaf05cd29.png怎么就没想到……买一本中文翻译版呢?

f8ca408361630a8fe93657855323738f.png

如果这本书早就被翻译成了全中文,我为什么还要找翻译、学英语、问法语呢?这可以节省多少资源和时间啊。

e4312fa85cdcd2ab899693de2bf73e7d.png华为的解决方案正是如此,方舟编译器所做的,相当于把英文名着,翻译成中文译本的工作。也就是说,在应用打包 APK 的时候,就把 Java 代码编译成了机器码。

d371cb329d9ab2bdfc6cd377d3a7bee4.png

说着简单,真正要实现起来其实困难重重。

要将 Java 语言直接编译成机器码,不仅仅要编译静态语义,还要能编译千变万化的动态语义。

cc6e896c061d062f6eeb0dc79a5a5d29.png这之中的难度非常巨大,毕竟安卓花了十几年都没能彻底解决。你要说被华为轻轻松松就搞定了?那实在有点傲慢。

0e8815d748598a5006752efea2cf45b4.png实际上华为为了攻克这个难关,做了很多艰苦卓绝的工作。

从 2009 年就开始布局,期间投入了大量人力物力。

方舟编译器团队遍历了 Java 的动态语义,做了大量的数据建模,设计了具有核心专利的动态语义匹配机制。

还实现了混合语言的统一 IR(中间语言),有效避免多余的 JNI 开销。

6d4b08843a17ad1ee2fadafd0b065456.png

顺便引入计数法(Reference Counting)来进行内存回收,解决了安卓 GC 回收机制的弊端。

2c429abb3a8a53fd1bbea9eb94261b34.png

9dab177cebcb0db315818293f135c2eb.png最后的结果就是,操作系统的流畅度提升 24%,系统响应性能提升 44%。

经方舟编译的第三方 App,操作流畅度甚至能提升 60%。

bebf43a153d5c6b2248be03464b81d79.png

光说不练假把式,华为说提升 60% 就 60% 了?

机哥拿第一批使用上方舟编译器的 App 微博极速版,实测试试。咱们直接把难度拉到最高,点开华为官方微博的相册,测试短时间加载大量图片的速度。PK 的对象,挑一台人们心目中流畅度的标杆——iPhone XS Max,来看看到底是谁更胜一筹。左:iPhone XS Max │ 右:P30 Pro

41a1efdee63419f48dce391c0e53a71b.gif额……没想到左边的 iPhone 根本追不上右边的 P30 Pro 啊……根据华为公布的消息,除了微博极速版,下面这 40 多个 Top 应用,都会迅速跟进,推出方舟编译版本的 App。

ede43f3c690f3f0da12aa587a19c4e92.png细想下来,方舟编译器可谓是华为在自己的系统生态蓝图上,下的一颗重要棋子。

8cb64225bd3a3a120672147a5dd102c8.png还记得华为开发者大会上,余承东这样说道:

908cb5124d1e77f2af666f654d50c44c.png考虑到生态原因,我们支持谷歌的安卓生态,优先使用谷歌安卓操作系统,如果安卓操作系统无法使用了,我们随时可以启用鸿蒙。

而方舟编译器、EROFS 文件系统的出现。

也证明了华为早已脱离了简单的,基于安卓定制 UI 的水平。

ff1d9f88f5268f270cec8c4b51a6e127.png实力早已进化到能对系统底层推倒重来。

所以,如果安卓可以继续用,那么方舟编译器或许会让华为,在安卓阵营一枝独秀。

如果安卓不让用了?

有鸿蒙 OS + 方舟编译器,咱也没在怕的。

华为这次,真的牛逼

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值