华为方舟编译器横空出世,这次彻底了解下底层是如何打败安卓

Posted 袁袁科技资讯

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了华为方舟编译器横空出世,这次彻底了解下底层是如何打败安卓相关的知识,希望对你有一定的参考价值。


致力于打造轻知识点,持续更新每次的知识点较少,阅读不累。不占太多时间,不停的来唤醒你记忆深处的知识点。

一、编译器

通俗点讲:编译器是把高级语言(开发人员友好的语言),“翻译为”低级语言(机器友好的语言)。

编译过程:源代码 (source code) → 预处理器 (preprocessor) → 编译器 (compiler) → 目标代码 (object code) → 链接器 (Linker) → 可执行程序 (executables)

编译器种类:

本地编译器,生成可执行目标代码,需要在和编译器同样环境下运行。

交叉编译器,生成目标代码跨平台运行。

二、方舟编译器架构

8月31日,方舟编译器开源。

架构设计:



三、安卓的四大命门:

3.1 Java的“虚拟机”

Java 为了一处编译,处处可执行,借助了虚拟机来抹平所有硬件平台资源。Java首先编译成Java字节码,在运行的时候,还需要借助虚拟机来将Java字节码(即中间代码)解释成机器可以运行的机器码。

android 经历过的虚拟机:

3.1.1 Android 1.0 Dalvik 虚拟机,边解释边执行。

3.1.2 Android 2.2 Dalvik虚拟机,JIT即时编译。每次启动APP,先进行代码转换为机器码。这个是当时程序启动慢的原因。不用逐句编译。

3.1.3 Android 5.0 ART虚拟机,AOT编译器。安装时将代码转换为二进制,持久保存。这个在 5.0 时代,经历过安装时间过长的原因。

3.1.4 Android 7.0 ART虚拟机,混合编译。混合编译=AOT+JIT+解释器。AOT闲时进行,AOT来不及则采用JIT和解释器。

3.1.5 总结:无论编译器还是解释器,都是在虚拟机上折腾。这种虚拟机+编译器+解释器,占用大量硬件资源,还无法达到最大的软件运行性能。这个是Android比拼硬件的原罪,马不停蹄的提升内存和储存空间,来跑个分吧。

3.2 Java跨语言JNI开销

JNI继续加重着不堪重负的硬件资源,根本就笨重的虚拟机添加这额外的开销。


华为方舟编译器横空出世,这次彻底了解下底层是如何打败安卓


3.3 优化空间有限

编译器包含三个部分

前端:负责源码翻译字节码

编译器优化: 负责代码优化

后端:负责编译成机器码

Android 防止碎片化,只开放编译代码优化模板,给代码优化套上了金库咒,能优化的空间有限。

3.4 Java垃圾回收间歇性卡顿

硬件资源不足,虚拟机开始 GC 清理垃圾,运行的Java线程全部暂停,等待回收完毕。虽然回收的时间短,可能在刚开始还感觉不明显,但是随着使用手机时间的增长,Android会越来越卡的原因。

四、方舟编译器使命

方舟编译器生来就是为干掉虚拟机目标。

华为P30发布标志着,方舟编译器将Java虚拟机彻底干掉,首次将Java/C/C++混合开发编译成机器码,在手机上直接运行。

解决问题:

虚拟机占用硬件资源


华为方舟编译器横空出世,这次彻底了解下底层是如何打败安卓


Java的JNI开销



GC垃圾回收卡顿



 

以上是关于华为方舟编译器横空出世,这次彻底了解下底层是如何打败安卓的主要内容,如果未能解决你的问题,请参考以下文章

华为:方舟编译器8月正式开源

为何而生?详解华为方舟编译器

华为大批方舟编译器应用上线!鸿蒙系统再下一城:国内巨头纷纷联手

华为“方舟编译器”到底是啥?一文看懂TA如何让手机性能再突破

方舟编译器破空而来,安卓无限接近iOS,华为这次的技术大招牛在哪?

一文看懂华为方舟编译器