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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

假设今天机哥想读一本书,嗯,一本世界名著。

只不过,它是全英文的。

这时候机哥遇到了第一个问题:

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

很快,机哥遇到了第二个问题:

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

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

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

最后,还有第三个问题:

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

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

英语=安卓的基础语言 Java;

中文=机器能懂的语言;

翻译=把 Java 翻译成机器语言的“解释器”;

疲劳=内存资源不够用。

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

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

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

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

事实上,他们做了不少努力。

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

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

效率低下不说,还特别吃硬件。

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

这可以节省多少资源和时间啊。

华为的解决方案正是如此,方舟编译器所做的,相当于把英文名著,翻译成中文译本的工作。

也就是说,在应用打包 APK 的时候,就把 Java 代码编译成了机器码。

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

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

这之中的难度非常巨大,毕竟安卓花了十几年都没能彻底解决。

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

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

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

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

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

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

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

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

机哥拿第一批使用上方舟编译器的 App 微博极速版,实测试试。

咱们直接把难度拉到最高,点开华为官方微博的相册,测试短时间加载大量图片的速度。

PK 的对象,挑一台人们心目中流畅度的标杆——iPhone XS Max,来看看到底是谁更胜一筹。

左:iPhone XS Max │ 右:P30 Pro

额……没想到左边的 iPhone 根本追不上右边的 P30 Pro 啊……

根据华为公布的消息,除了微博极速版,下面这 40 多个 Top 应用,都会迅速跟进,推出方舟编译版本的 App。

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

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

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

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

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

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

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

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