01f2339f935f3dd0801a2eff702cc86a.png

华为开发者大会上再次介绍了方舟编译器,通过方舟编译器,可以让安卓系统不再卡顿,从根源上解决安卓卡顿问题,那么到底什么是方舟编译器?它是怎么解决安卓卡顿问题的呢?

要想了解方舟编译器,我们先要知道什么是编译器?编译器:将一种语言翻译成能直接被计算机或者虚拟机执行的目标代码,编译器的效率直接影响程序执行的性能和效率。也就是说编译器是用来翻译开发语言的,翻译的好就容易被机器执行,翻译不好就不容易被机器执行。

了解了编译器的定义以后,我们来看依稀啊为什么安卓会卡顿。在安卓最开始时候,应用需要通过虚拟机(Dalvik)才能运行,虚拟机上面集成了一个解释器。APP在打开时候会唤醒解释器,解析器来给机器解释接下来要干什么。这个步骤严重拖后腿,所以在安卓升级引入了JIT机制,这个机制会即时将部分频繁调用的代码转换为机器码(机器可以执行的代码),虚拟机不用逐句编译,从而提高效率,但是每次启用应用都要编译,而且虚拟机(Dalvik)性能落后,所以安卓在后续的升级中又更换了虚拟机,更换为ART,JIT机制也换成了AOT,AOT是在安装应用的时候就先将部分代码翻译成机器码,优势就是不用每次打开应用都重新编译一遍,坏处就是应用安装比较慢,而且占用空间。目前的安卓使用的是虚拟机+JIT+AOT模式,虽然目前安卓效率相比以前有了提升,但是由于安卓的天生特性,应用被打包成APK时,使用的是JAVA代码,还是需要通过虚拟机解释,代码不能直接被机器上执行。

现在的安卓应用都是采用的JAVA和C/C++混合开发的,两种语言采用不同架构,为了互通两种语言,安卓还需要互通接口JNT来解决,这个过程需要占用硬件资源,降低效率。还有安卓的GC内存回收机制,无法精确的控制内存回收,安卓运行时,系统垃圾回收器来集中回收,内存过低时候根据优先级会停止系统进程,造成卡顿

e55648f84c124579fe9b478e5a0bd290.png

总结以上来说就是安卓的APK应用代码不能直接被机器执行,需要经过虚拟机的解释,而不同语言的互通和内存回收机制的不精确,都会造成系统的卡顿,虽然安卓增加了一些机制,但是都没有从跟根本上解决这个问题。

那么谷歌花了这么长时间都没有解决的问题,华为就这么轻易解决了吗?当然不是轻易解决,华为方舟编译器,前后花费时间十年,十年磨一剑,才推出方舟编译器。了解了安卓为什么会卡顿,下面我们看一下方舟编译器是怎么解决这个问题的。

7d71266a5a92d82ee516831fd3a516c0.png
84b9eeac168bc575f36dcf5f910b831c.png

首先方舟编译器彻底去掉了虚拟机,经过方舟编译器编译的应用,可以直接将JAVA语言翻译成机器可以直接执行的机器码,也就是说应用执行时,不需要经过虚拟机,从源头直接解决了问题。目前安卓是运行时候进行翻译,而方舟编译器是在应用开发的时候就翻译好,机器运行时候不需要再频繁翻译,大大提升了流畅性,这也是方舟编译器厉害的地方。

cffbbbadccffa2cb7ff56b06cff201ee.png

第二是垃圾回收机制,方舟编译器可以让应用运行时随用随回收,回收时候无须停止应用。方舟编译器可以说从源头上解决了安卓的卡顿问题,而华为也宣布了方舟编译器将会开源,让更多厂商使用和更多开发者参与,搭建完整生态。

4458cba5df129a74fddfc6f9f9290057.png

通过方舟编译器还有鸿蒙OS,我们可以看到华为的技术实力,希望这项技术能够尽快普及,也希望华为越来越好!!

Logo

华为开发者空间,是为全球开发者打造的专属开发空间,汇聚了华为优质开发资源及工具,致力于让每一位开发者拥有一台云主机,基于华为根生态开发、创新。

更多推荐