助力 Android 抗衡 iOS,华为发布方舟编译器!

作者:屠敏

来源:CSDN整理

传说中的诺亚方舟可以拯救全人类,那么活在现实的方舟编译器是否真的能突破Android系统性能原有的限制?

要说上个月于巴黎召开的P30系列发布会,华为是以全硬件正面刚苹果,那么4月11日在上海面向国内市场推出P30系列手机的发布会,华为就是以不经意的姿态撩了一下Google。

之所以这么讲,是因为这一次的发布会,引发国内消费者热烈追捧的不仅是比国际版价格要低2000元左右的P30系列,还有着让技术圈为之热议的大事件,即华为消费者业务CEO余承东在发布会上仅花费短短两分钟时间“随口一提”且富有神秘感的Android系统性能的革命性突破应用——方舟编译器。

没有一个硬实力,哪能随便提革命性突破?

其实单从名称上来看,不少人的第一感观就是“高大上”,另外,其似乎也隐喻着未知的创新、无限的潜力以及丰富的扩展性等愿景。而对于这个名字的由来,不少网友猜测这可能与华为研发美国编译技术首席科学家Fredchow有关:

第一,他是开源Open64编译器的首席架构师,具有25年的编译器经验,于2014年加入华为硅谷子公司FutureWei;

第二,Fredchow音译过来可以看成是“方舟”。

那么真实的方舟编译器究竟具有怎样的“魅力”?根据余承东在发布会现场的解释,华为方舟编译器可解决Android程序“边解释边执行”的低效,能达到架构级优化,且显著提升性能。

为此,余承东还以汽车运行的例子来凸显两种的差别:

  • 现有的Android系统:存在边解释边执行的低效现象;

  • 使用华为方舟编译器:全程执行机器码高效运行程序。

其中,边解释边执行是怎么一回事?全程执行机器码又是什么情况?

Android编译器原理

首先,不少程序员可能都知道,对于CPU而言,无论是用Java、C/C++、还是用Python来写应用,结果都一样,因为其根本无法直接识别代码。毕竟当前的计算机只能根据电压的高低变化来计算,即高电压是1,低电压是0,而这种数制方式被称之为二进制。二进制代码语言又被称为机器语言,计算机可以直接识别。因此无论是Android应用还是iOS应用,想要在CPU中运行,都需要经过翻译或者编译成机器码。

接下来,将以Android平台举例说明,众所周知,大多数的Android应用都是由Java开发而成,而Java代码的执行依赖于Java虚拟机(JVM),其提供了字节码文件(.class)的运行环境支持,即在Java程序编译成.class文件之后,由JVM将程序解释给本地系统执行,其中,后者的过程通常被叫做「解释执行」。

此外,还有一种叫做「编译执行」的模式,这种模式主要分为两种:

  • JIT(Just-in-time,即时编译),边运行边编译;

  • AOT(Ahead-Of-Time,运行时编译),在程序运行前编译,可以避免在运行时的编译性能消耗和内存消耗。

就Android系统而言,首次引入JIT功能是在Android2.2版本中,彼时Google的目的是为了提高Android的运行速度,即当App运行时,JIT编译器就会对新类进行编译,经过编译后的代码,会被优化成相当精简的原生型指令码,这样在下次执行到相同逻辑的时候,速度就会更快。不过好景不长,JIT在运行时编译开销大,容易造成卡顿,所以在4.4版本之后,Dalvik虚拟机被逐渐抛弃的过程中,JIT也被弃用了。

而在随后的Android5.0系统中,ART正式取代了Dalvik,ART中完全抛弃了JIT,使用的是AOT的编译方式,这种方式的好处是,当App在第一次安装时,字节码会预先编译成原型指令码,让其成为真正的本地应用,这样App的启动及运行速度都会大幅提升。不过这种方式也存在巨大的缺陷,一是安装应用时需要全面编译,用户等待安装的时间过长;二是安装过程中翻译出来的机器码占用了大量的内存空间。

因此,Google为在安装时间、内存占用、电池消耗和性能之间获得折中方案,又于Android7.0版本重新加入了JIT编译模式,即当前的Android系统引入的是包含编译、解释和JIT的混合运行时。详细而言,当App安装时,首先不用像Android6.0中对应用进行完整的预编译,而会根据JIT编译器的分析结果,一方面,在设备充电或其余空闲时间对「coldcode」进行解释;另一方面,对「hotcode」在实际使用时由JIT进行编译。

以上即为华为所述的原有Android系统存在边解释边执行的低效现象,至于方舟编译器如何达成全程执行机器码高效运行程序的?

由于该项目暂时还上线开源,目前尚未可知。不过对此不少开发者猜测,方舟编译器更可能是直接将应用程序的安装包,即APK打包成机器码格式,得以让系统可以直接识别。最终结果我们还需等待该项目开源之后才能揭晓谜底。

华为方舟编译器将会对Android系统带来什么样的影响?

不过,余承东于现场表示,通过方舟编译器,不仅可以解决应用卡顿的问题,还可以为系统操作流畅度提升24%、系统响应速度提升44%,第三方应用操作流畅度提升60%。同时余承东也呼吁,希望App开发厂商尽快使用。

这样看起来,性能大幅提升之后的Android应用与iOS系统中的应用差距正在逐步缩小,甚至大有超过的趋势。事实上,方舟编译器能实现这样的性能提升,无论是对企业、开发者,还是对用户而言,也无疑都是一件好事。而对于华为本身而言,从上个月余承东在接受德国《世界报》采访时表示华为已经为智能手机和电脑开发了自己的操作系统,以防美国科技巨头不再向其授权现有系统后,到这一次透露即将开源的编译器,整体也可看成是华为正在为其尚未面世的操作系统的生态系统布局做好充足的准备。

那么,对此,你怎么看?

相关阅读

评论