300字范文,内容丰富有趣,生活中的好帮手!
300字范文 > 华为方舟编译器深度解读 颠覆安卓体验就靠它

华为方舟编译器深度解读 颠覆安卓体验就靠它

时间:2023-04-11 08:16:59

相关推荐

华为方舟编译器深度解读 颠覆安卓体验就靠它

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

在系统方面

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 等设备,就如同收获的果实。未来,就像余承东说的那样:" 它详细解读了我们如何用十年努力,让方舟编译器和世界对话,让手机的使用体验更加流畅。接下来方舟编译器会全面开源,期待更多合作伙伴加入方舟阵营,一起为消费者带来全新的移动应用生态和体验!"

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。