一、什么是方舟编译器
方舟编译器虽然是在 4.11 日 HUAWEI P30 系列国内发布会上公布的应用编译技术,但其实华为早在 5 年前就开始布局,并投入数百专家团队,历经多次尝试,才在 EMUI 9.1 上实现了机器代码的翻译。几千年来,人们从裹腹耐寒到智慧创新,从未停止探索世界的步伐。同时,他们将这些智慧赋予更多的物体,比如机器。
想让机器读懂人类情感,他们之间就需要有个“翻译”,来充当人机交互的桥梁,也就是专业人士口中的编译技术。
它能够将 C、Java 等高级语言转换为机器能读懂的低级语言,将精妙的代码转化为 0 和 1 的二进制指令,消除了沟通障碍,从而驯服了机器。
可以说编译器是软件与芯片之间的桥梁,其性能,效率直接影响到机器的运行效率。
二、方舟编译器和Java的故事
而既有的安卓系统框架与应用之间,仍然使用的是不被机器直接读懂的 Java 语义,最初的解决方案是通过增加一个虚拟机制(JVM),相当于一个“中间层”将 Java 语言“翻译”为机器可以读懂的汇编指令。
中间层”翻译一句 Java 语义机器就执行一段,也就是“边解释边运行”(动态编译),不但效率低,耗费系统资源,对操作流畅度也有影响。
尽管安卓系统 6.0 以后采用了 ART (Android Runtime)模式,对调用次数多的 Java 代码编译为机器码(静态编译);在设备空闲的时候进行一些预编译,解决了部分 Java 代码执行效率问题,但对于动态语义部分还是无法实现静态编译,仍需要虚拟机充当“翻译”边解释边运行,效率和体验提升有限。
而方舟编译器,采用了全新的系统及应用的编译和运行机制,对所有的 Java 语义全部做到静态编译,直接将 Java 语言“翻译”成机器语言(静态编译),消除了虚拟机动态编译的额外开销,实现了开发和运行效率的兼容并举。
如果把编译器看做一个翻译,就好比我们去到一个语言不通的国家,原本只能通过同声翻译(虚拟机)来进行交流沟通,难免效率低下。而华为方舟编译器更像是让您直接获得了语言能力,从而可以摆脱同声翻译(虚拟机),可以更畅快地与当地人沟通。
根据华为实验室的测试数据,EMUI 9.1 在仅仅对系统组件 System Server 应用了华为方舟编译器后,系统操作流畅度提升 24%,系统响应性能提升 44%。同时,新浪微博极速版在应用方舟编译器之后,操作流畅度最高提升了60%
方舟编译器编译的应用在开发阶段就已完成。也就是说,只要是经过编译器编译的应用,在应用市场上上架了以后,用户下载的就是编译过的了。
三、方舟编译器在底层重造安卓系统体验
据王成录透露,在方舟编译器发布当天,电话被打爆了,业界的开发者都高度关注。
为什么会这样?因为方舟编译器是对安卓底层机制的重构,给用户体验带来的提升是颠覆性的。
它解决的是安卓手机上最大的痛点:“卡顿”。编译器,就像是人类和机器沟通的桥梁,承担着将高级语言“翻译”成机器能懂的机器码,并按照指令运行。但是,在安卓系统中,编译器却有一个绕不过的坎儿:虚拟机。安卓系统虽然在不断演进,但始终需要虚拟机来实现解释和执行。
用翻译的方式来比喻,更容易理解。安卓程序的虚拟机中有解释器和编译器,相当于是有两个翻译在运行。解释器好像现场翻译,演讲者讲一句,就需要停下来翻译一句给编译器,编译器则结合上下文一次翻译一大段。两个翻译同时在搞,于是你听到的内容就是断断续续的,你的系统就会变得非常卡顿。
而且,虚拟机的统一回收内存也是卡顿的罪魁祸首之一,Java的虚拟机模式提供了内存GC(垃圾回收)机制,内存垃圾是集中回收,但全局回收时需要短暂中断应用,成为随机卡顿的根因之一。
那么,方舟编译器带来的颠覆在哪里呢?首先,方舟的内存回收机制是随用随回收,回收时无需暂停应用,因内存回收的随机卡顿就消除了。其次,方舟编译器是在应用打包的时候直接编译出了机器指令,无需繁琐的虚拟机运行,彻底消除了虚拟机的动态编译的额外开销,从边翻译边执行到提前编译机器码直接执行(运行时无需再编译),大幅提升了效率,让性能得到大幅提升。
用量化的方式可以很好地看到这种性能提升的效果:有了方舟编译器的手机,能实现系统操作流畅度提升24%,系统响应性能提升44%。
能实现这样的效果,方舟编译器的内存回收机制也功不可没。原来虚拟机的内存回收是统一进行的,全局回收时需要暂停应用(导致卡顿);而方舟编译器则是内存随用随回收,回收时无需暂停应用,显然能够避免卡顿。
方舟编译器看起来深奥,但是对应用开发者和用户来说却很简单。王成录说,对于应用开发者无需修改代码,只需要用方舟编译器重新编译,就能带来性能的提升。对于用户来说,只要在应用市场下载编译过的应用,就直接能享受到性能提升的好处。
重新编译,会带来应用安装包和安装后占用空间的增大,以微博极速版为例,安卓9.0的apk是9.7Mb,安装后是37.5Mb,而使用方舟编译器后的安装文件apk是23Mb,安装完后大约不到50Mb。但是,使用方舟编译器后的性能提升却是颠覆性的,微博极速版的操作流畅度提升了60%!
一句话,方舟编译器给安卓程序的性能提升结果非常显著。这个性能提升可以用应用执行时间来衡量,而应用执行时间=应用执行指令总条数X平均每条指令所用CPU cycle数/ CPU频率,CPU频率由手机硬件决定,方舟编译器可以实现平均每条指令所用CPU cycle数更少、应用执行指令总条数更少,从而带来更快的应用执行时间。
同样用翻译来比喻这种编译带来的性能提升。““What happens in Vegas, stays in Vegas”如果比作最初的应用,如果不编译,翻译可能是“在拉斯维加斯发生的一切,就留在拉斯维加斯”,而方舟编译器编译带来的则是“勿念过往 活在当下”,显然要好得多。
总结
所以,方舟编译器、EROFS超级文件系统等颠覆性的技术创新,只是华为在软件领域不断突破和努力的缩影。华为正在凭借自己的技术实力和不断努力,重造安卓系统的体验。
除了硬件的技术突破,软件也在用户体验中扮演越来越重要的角色。这就是软件的力量,通过持续的技术进步,持续的生态开放,让消费者感受到,华为的产品体验在进步,安卓系统的体验在进步。