机锋网>手机>评论>正文
华为方舟编译器深度解读 颠覆安卓体验就靠它
2019-08-07 17:09:10 【机锋网】 作者:机锋网 责编:机锋网
0
机锋网

【机锋评论】“逆水行舟”这个词表示逆着水流行船,用来比喻不努力就要后退。其实说实话,从笔者个人对安卓系统认知和大环境来看,华为的方舟编译器,既是一套适合国人使用的编译器,又是未来安卓系的一大发展趋势。方舟编译器,从笔者对其了解来看,其实有几点是最为重要:


timg.jpeg


在系统方面


1、干掉了复杂的Java虚拟机。

2、干掉了混合语言互相调用带来的JNI开销。

3、不用改变编程习惯,即可使用方舟编译器进行优化。

4、引用计数法,对系统内存进行随时用随时回收,消除卡顿。


对使用体验:


1、通过华为方舟编译器,替换Android system-server服务,让手机运行得到本质提升,这包括手机APP打开速度和流畅度。

2、兼容市面上主流安卓应用。


想干掉复杂的Java虚拟机 华为拥有神秘“黑科技”


在讲华为这项“黑科技”之前,有必要为大家讲解什么叫“虚拟机”。早在安卓系统诞生起,就用java语言进行编写,但是在运行过程中,需要借助虚拟机机制来编译源代码,在Android 1.0时代,这个虚拟机叫Dalvik,到Android 2.2,引入了JIT编译器,虽然可以让用户在启动APP时候,将经常使用的功能直接编译为机器语言,但是仍旧需要每次都重新编译,大大增加手机的处理负担。


ChMlWl1C26uIanLVAAEfXYqN6csAAMSrwB188MAAR91514.jpg

图片来自网络


Android 5.0时代,Dalvik虚拟机升级到了ART,JIT编译器也“升级”到了AOT,即用户在下载APP到手机安装时候,就直接可以把编译的代码直接编译成机器语言,当然还有部分没有编译的代码,这个就在用户启动APP时候再使用解释器来编译。虽然比1.0运行效率要高,但是牺牲了安装时间。


到Android 7.0时代,为了解决安装时间过长问题,采用了混合编译机制,即在安装APP时候不编译中间代码,而是等APP空闲下来时,先通过AOT静态编译出一部分机器代码。如果AOT环境下遇到问题,再激发JIT编译器+解释器进行“辅助”。


ChMlWl1DpVeIbL1fAABL8_rRDbIAAMTmwBcb1cAAEwL184.jpg

图片来自网络


但是上述的代价,就是需要大量运行内存和不断的高存储写入,进而增加功耗和发热。而华为干掉虚拟机,其实就是将Java代码直接编译成010101的机器码。但是大家要明白,Java语言里有静态语义和动态语义,大多数的动态语义,java无法做到直接编译还得交给虚拟机。


方舟编译器则解决了静态编译动态语义的两点最大难题,设计数据模型和运行时候的高效获取动态信息问题,前者大规模研究了java动态语句,进行数据建模,在面对后者问题时,华为单独设计了一套具有核心专利的动态语义匹配机制。


这样在克服这两点困难后,就不再需要虚拟机了,笔者认为,其实安卓系统卡顿的一切缘由,都是虚拟机在作祟。此外,笔者也大胆猜测,方舟编译器或许就在为鸿蒙系统做准备。


干掉混合语言互相调用带来的JNI开销


这点其实同样和java语言有关系,目前大部分常用的软件都是Java和C/C++等语言混合编写而成,为了能够让APP可以正常运行,就需要互通有无,这样一个“通用”接口就出现了——JNI,手机在调动APP时候,需要分配一部分资源给到JNI做调度,这样会大幅度占据硬件资源,而方舟编译器其实统一了各种语言,实现统一中间IR,为此,华为对IR已经进行了超过五年的研究,并研发了一套专利,这样使用不同代码,可以在相应开发环境中,统一成一套可以直接执行的机器代码。


ChMlWl1DqoKICvfvAAESbSPcHgAAAMTqgA31AYAARKF125.jpg

图片来自网络


当然还有一点,笔者就直接放在这个小专题中讲,即代码优化,开发者可以自行代码优化,也可以通过方舟编译器预置的算法进行代码优化。这样在编程进行代码优化时候,就在方舟编译器这个环境中即可,从源代码到后端的机器码,均可以非常方便的编译。


而笔者发现,华为另一大计划,是想通过代码云端化,让所有开发者参与进来,共同对代码进行优化,进而让最后的编译效率得到提升。


结束安卓虚拟机GC内存回收问题


我们知道,安卓手机早期运行内存并不高,当手机内存资源不能满足不断增加的新请求时候,安卓系统内,就会调用虚拟机的GC(Garbage Collection)机制,换句话讲,如果激发出GC,就会让手机运行的Java线程全部暂停,并等待回收内存空间。此外,这个机制一旦被激发,外界几乎不能做任何更改和设置,用户无法把它删掉,这样最终会引起手机卡顿。


屏幕快照 2019-08-07 下午5.06.11.jpg

图片来自网络


其实针对这个问题,解决方法非常简单,只要增加运行内存即可,这也就解释了,为什么目前手机运行内存不断飙升,从一开始的256M RAM,到今天的12GB RAM。其实也可以从手机使用角度来分析:手机APP应用体积不断变大、内容越来越丰富、画面特效也达到了和PC端一样,势必会增加手机内部资源,加上安卓的GC机制,最后其实“顺理成章”的会造成卡顿。


华为解决安卓虚拟机GC回收机制问题,采用的是一项名为引用计数法的技术,这项技术可以对内存进行实时回收,此外,还配合消除环算法,来避免回收带来的卡顿。另外,为了抑制手机运行内存被环引用占据,方舟编译器还引入了annotation的“告警”标示,对基础类的环进行标注,笔者大胆推测,如果开发者增加标注,那最终将会减少系统卡顿。


写在最后:


从目前工信部数据来看,目前已经有20款5G手机等待上市,5G设备终端已经非常成熟,这将直接带动5G市场活力,另外随着运营商资费下降,新一轮的换机风潮,将会很快来临。而带动的视频类内容,也将会掀起一股潮流。这些比图文更加直观的内容,势必会增加手机硬件资源的占用,而系统体验,是最容易让消费者直接感受到的,如果想要从“根基”做出改变,就需要从系统入手。


而华为方舟编译器的出现,确实是华为生态系统中非常重要一环,就像“树根”一样,而移动终端和IOT等设备,就如同收获的果实。未来,就像余承东说的那样:“它详细解读了我们如何用十年努力,让方舟编译器和世界对话,让手机的使用体验更加流畅。接下来方舟编译器会全面开源,期待更多合作伙伴加入方舟阵营,一起为消费者带来全新的移动应用生态和体验!”


评论

关注微信公众号

下载APP客户端

机锋网登录页

请输入账号

请输入密码

验证码错误

忘记密码? 没有账号,立即注册

机锋网注册页

请输入账号

验证码错误

验证码错误

两次密码输入错误

您还未接受机锋网用户协议

已有账号,

机锋网找回密码

手机找回邮箱找回

请输入账号

验证码错误

验证码错误

请输入密码

两次密码输入错误

十二生肖126期今晚126期码图 中方县| 上杭县| 定陶县| 安阳市| 措美县| 东丰县| 化州市| 犍为县| 青浦区| 洞口县| 鹿邑县| 博客| 高青县| 仪陇县| 曲阜市| 淮南市| 邯郸县| 广南县| 台东县| 商河县| 新余市| 兖州市| 德格县| 阿坝县| 孝义市| 册亨县| 平乡县| 西和县| 溆浦县| 九龙坡区| 恩平市| 宝应县| 湘潭市| 万安县| 吉木乃县| 建阳市| 安塞县| 阿巴嘎旗| 鹤山市| 黔西| 岳普湖县| 崇州市| 九龙坡区| 灵寿县| 成武县| 清丰县| 五指山市| 丰宁| 基隆市| 常宁市| 碌曲县| 聂拉木县| 宁陵县| 乡城县| 诸暨市| 平陆县| 伊宁县| 鄂尔多斯市| 晋宁县| 宕昌县| 望谟县| 湄潭县| 贵阳市| 江阴市| 金昌市| 蓝田县| 东乡| 巴林右旗| 武隆县| 平山县| 乌审旗| 广西| 义乌市| 东辽县| 绥滨县| 田林县| 九江市| 七台河市| 从化市| 聊城市| 武鸣县| 太仆寺旗| 怀来县| 丹阳市| 新丰县| 谢通门县| 图片| 江都市| 安乡县| 贡觉县| 集安市| 宾阳县| 永川市| 蛟河市| 樟树市| 玉树县| 闽侯县| 鹿邑县| 旌德县| 长顺县| 大石桥市| 盐津县| 许昌县| 皋兰县| 高陵县| 岑巩县| 广南县| 道孚县| 孟村| 郓城县| 盐源县| 浠水县| 茌平县| 巴楚县| 商水县| 高淳县| 米脂县| 南开区| 舒城县| 石嘴山市| 双流县| 台州市| 南安市| 榆中县| 金乡县| 崇阳县| 昌乐县| 漾濞| 甘孜| 石棉县| 谢通门县| 双桥区| 江油市| 多伦县| 泰州市| 繁峙县| 宣化县| 水富县| 凤庆县| 吴旗县| 岳阳县| 淮南市| 奇台县| 九龙城区| 乌兰察布市| 安丘市| 六盘水市| 长乐市| 奈曼旗| 卓资县| 阳西县| 察雅县| 池州市| 福贡县| 大宁县| 南京市| 汶上县| 金乡县| 巴彦淖尔市| 昌图县| 金溪县| 千阳县| 民乐县| 余江县| 新密市| 临洮县| 稷山县| 新兴县| 壤塘县| 忻城县| 延寿县| 南陵县| 新干县| 邵武市| 文成县| 鄯善县| 晋江市| 鹿邑县| 灵丘县| 嵊泗县| 临沂市| 鸡泽县| 乐昌市| 平顺县| 北流市| 莱芜市| 蕉岭县| 集贤县|
10.9.94.115