华为方舟编译器横空出世,这次彻底了解下底层是如何打败安卓
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垃圾回收卡顿
以上是关于华为方舟编译器横空出世,这次彻底了解下底层是如何打败安卓的主要内容,如果未能解决你的问题,请参考以下文章
华为大批方舟编译器应用上线!鸿蒙系统再下一城:国内巨头纷纷联手
华为“方舟编译器”到底是啥?一文看懂TA如何让手机性能再突破