华为方舟编译器深度解读 颠覆安卓体验就靠它
Posted 机锋网
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了华为方舟编译器深度解读 颠覆安卓体验就靠它相关的知识,希望对你有一定的参考价值。
【机锋评论】
其实说实话,从笔者个人对安卓系统认知和大环境来看,华为的方舟编译器,既是一套适合国人使用的编译器,又是未来安卓系的一大发展趋势。方舟编译器,从笔者对其了解来看,其实有几点是最为重要:
在系统方面:
1、干掉了复杂的Java虚拟机。
2、干掉了混合语言互相调用带来的JNI开销。
3、不用改变编程习惯,即可使用方舟编译器进行优化。
4、引用计数法,对系统内存进行随时用随时回收,消除卡顿。
对使用体验:
1、通过华为方舟编译器,替换android system-server服务,让手机运行得到本质提升,这包括手机APP打开速度和流畅度。
2、兼容市面上主流安卓应用。
想干掉复杂的Java虚拟机 华为拥有神秘“黑科技”
在讲华为这项“黑科技”之前,有必要为大家讲解什么叫“虚拟机”。早在安卓系统诞生起,就用java语言进行编写,但是在运行过程中,需要借助虚拟机机制来编译源代码,在Android 1.0时代,这个虚拟机叫Dalvik,到Android 2.2,引入了JIT编译器,虽然可以让用户在启动APP时候,将经常使用的功能直接编译为机器语言,但是仍旧需要每次都重新编译,大大增加手机的处理负担。
图片来自网络
Android 5.0时代,Dalvik虚拟机升级到了ART,JIT编译器也“升级”到了AOT,即用户在下载APP到手机安装时候,就直接可以把编译的代码直接编译成机器语言,当然还有部分没有编译的代码,这个就在用户启动APP时候再使用解释器来编译。虽然比1.0运行效率要高,但是牺牲了安装时间。
到Android 7.0时代,为了解决安装时间过长问题,采用了混合编译机制,即在安装APP时候不编译中间代码,而是等APP空闲下来时,先通过AOT静态编译出一部分机器代码。如果AOT环境下遇到问题,再激发JIT编译器+解释器进行“辅助”。
图片来自网络
但是上述的代价,就是需要大量运行内存和不断的高存储写入,进而增加功耗和发热。而华为干掉虚拟机,其实就是将Java代码直接编译成010101的机器码。但是大家要明白,Java语言里有静态语义和动态语义,大多数的动态语义,java无法做到直接编译还得交给虚拟机。
方舟编译器则解决了静态编译动态语义的两点最大难题,设计数据模型和运行时候的高效获取动态信息问题,前者大规模研究了java动态语句,进行数据建模,在面对后者问题时,华为单独设计了一套具有核心专利的动态语义匹配机制。
这样在克服这两点困难后,就不再需要虚拟机了,笔者认为,其实安卓系统卡顿的一切缘由,都是虚拟机在作祟。此外,笔者也大胆猜测,方舟编译器或许就在为鸿蒙系统做准备。
干掉混合语言互相调用带来的JNI开销
这点其实同样和java语言有关系,目前大部分常用的软件都是Java和C/C++等语言混合编写而成,为了能够让APP可以正常运行,就需要互通有无,这样一个“通用”接口就出现了——JNI。
手机在调动APP时候,需要分配一部分资源给到JNI做调度,这样会大幅度占据硬件资源,而方舟编译器其实统一了各种语言,实现统一中间IR,为此,华为对IR已经进行了超过五年的研究,并研发了一套专利,这样使用不同代码,可以在相应开发环境中,统一成一套可以直接执行的机器代码。
图片来自网络
当然还有一点,笔者就直接放在这个小专题中讲,即代码优化,开发者可以自行代码优化,也可以通过方舟编译器预置的算法进行代码优化。这样在编程进行代码优化时候,就在方舟编译器这个环境中即可,从源代码到后端的机器码,均可以非常方便的编译。
而笔者发现,华为另一大计划,是想通过代码云端化,让所有开发者参与进来,共同对代码进行优化,进而让最后的编译效率得到提升。
结束安卓虚拟机GC内存回收问题
我们知道,安卓手机早期运行内存并不高,当手机内存资源不能满足不断增加的新请求时候,安卓系统内,就会调用虚拟机的GC(Garbage Collection)机制,换句话讲,如果激发出GC,就会让手机运行的Java线程全部暂停,并等待回收内存空间。此外,这个机制一旦被激发,外界几乎不能做任何更改和设置,用户无法把它删掉,这样最终会引起手机卡顿。
图片来自网络
其实针对这个问题,解决方法非常简单,只要增加运行内存即可。这也就解释了,为什么目前手机运行内存不断飙升,从一开始的256M RAM,到今天的12GB RAM。其实也可以从手机使用角度来分析:手机APP应用体积不断变大、内容越来越丰富、画面特效也达到了和PC端一样,势必会增加手机内部资源,加上安卓的GC机制,最后其实“顺理成章”的会造成卡顿。
华为解决安卓虚拟机GC回收机制问题,采用的是一项名为引用计数法的技术,这项技术可以对内存进行实时回收,此外,还配合消除环算法,来避免回收带来的卡顿。另外,为了抑制手机运行内存被环引用占据,方舟编译器还引入了annotation的“告警”标示,对基础类的环进行标注,笔者大胆推测,如果开发者增加标注,那最终将会减少系统卡顿。
写在最后
从目前工信部数据来看,目前已经有20款5G手机等待上市,5G设备终端已经非常成熟,这将直接带动5G市场活力,另外随着运营商资费下降,新一轮的换机风潮,将会很快来临。而带动的视频类内容,也将会掀起一股潮流。这些比图文更加直观的内容,势必会增加手机硬件资源的占用,而系统体验,是最容易让消费者直接感受到的,如果想要从“根基”做出改变,就需要从系统入手。
而华为方舟编译器的出现,确实是华为生态系统中非常重要一环,就像“树根”一样,而移动终端和IOT等设备,就如同收获的果实。未来,就像余承东说的那样:“它详细解读了我们如何用十年努力,让方舟编译器和世界对话,让手机的使用体验更加流畅。接下来方舟编译器会全面开源,期待更多合作伙伴加入方舟阵营,一起为消费者带来全新的移动应用生态和体验!”
以上是关于华为方舟编译器深度解读 颠覆安卓体验就靠它的主要内容,如果未能解决你的问题,请参考以下文章