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

首页

正文

好机友

2019-08-12

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

前两天,万众期待的鸿蒙 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 + 解释器。

运行的时候进行 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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值