助力 Android 抗衡 iOS,华为发布方舟编译器!
传说中的诺亚方舟可以拯救全人类,那么活在现实的方舟编译器是否真的能突破 Android 系统性能原有的限制?
(图源:CSDN 付费下载自东方 IC)
要说上个月于巴黎召开的 P30 系列发布会,华为是以全硬件正面刚苹果,那么 4 月 11 日在上海面向国内市场推出 P30 系列手机的发布会,华为就是以不经意的姿态撩了一下 Google。之所以这么讲,是因为这一次的发布会,引发国内消费者热烈追捧的不仅是比国际版价格要低 2000 元左右的 P30 系列,还有着让技术圈为之热议的大事件,即华为消费者业务 CEO 余承东在发布会上仅花费短短两分钟时间“随口一提”且富有神秘感的 Android 系统性能的革命性突破应用——方舟编译器。
没有一个硬实力,哪能随便提革命性突破?
其实单从名称上来看,不少人的第一感观就是“高大上”,另外,其似乎也隐喻着未知的创新、无限的潜力以及丰富的扩展性等愿景。而对于这个名字的由来,不少网友猜测这可能与华为研发美国编译技术首席科学家 Fred chow 有关:
第一,他是开源 Open 64 编译器的首席架构师,具有 25 年的编译器经验,于 2014 年加入华为硅谷子公司 FutureWei;
第二,Fred chow 音译过来可以看成是“方舟”。
那么真实的方舟编译器究竟具有怎样的“魅力”?根据余承东在发布会现场的解释,华为方舟编译器可解决 Android 程序“边解释边执行”的低效,能达到架构级优化,且显著提升性能。
为此,余承东还以汽车运行的例子来凸显两种的差别:
- 现有的 Android 系统:存在边解释边执行的低效现象;
- 使用华为方舟编译器:全程执行机器码高效运行程序。
其中,边解释边执行是怎么一回事?全程执行机器码又是什么情况?
Android 编译器原理
首先,不少程序员可能都知道,对于 CPU 而言,无论是用 Java、C/C++、还是用 Python 来写应用,结果都一样,因为其根本无法直接识别代码。毕竟当前的计算机只能根据电压的高低变化来计算,即高电压是 1 ,低电压是 0, 而这种数制方式被称之为二进制。二进制代码语言又被称为机器语言,计算机可以直接识别。因此无论是 Android 应用还是 iOS 应用,想要在 CPU 中运行,都需要经过翻译或者编译成机器码。
接下来,将以 Android 平台举例说明,众所周知,大多数的 Android 应用都是由 Java 开发而成,而 Java 代码的执行依赖于 Java 虚拟机(JVM),其提供了字节码文件(.class)的运行环境支持,即在 Java 程序编译成 .class 文件之后,由 JVM 将程序解释给本地系统执行,其中,后者的过程通常被叫做「解释执行」。
此外,还有一种叫做「编译执行」的模式,这种模式主要分为两种:
- JIT(Just-in-time,即时编译),边运行边编译;
- AOT(Ahead-Of-Time,运行时编译),在程序运行前编译,可以避免在运行时的编译性能消耗和内存消耗。
就 Android 系统而言,首次引入 JIT 功能是在 Android 2.2 版本中,彼时Google 的目的是为了提高 Android 的运行速度,即当 App 运行时,JIT 编译器就会对新类进行编译,经过编译后的代码,会被优化成相当精简的原生型指令码,这样在下次执行到相同逻辑的时候,速度就会更快。不过好景不长,JIT 在运行时编译开销大,容易造成卡顿,所以在 4.4 版本之后,Dalvik 虚拟机被逐渐抛弃的过程中,JIT 也被弃用了。
而在随后的 Android 5.0 系统中,ART 正式取代了 Dalvik,ART 中完全抛弃了 JIT,使用的是 AOT 的编译方式,这种方式的好处是,当 App 在第一次安装时,字节码会预先编译成原型指令码,让其成为真正的本地应用,这样App 的启动及运行速度都会大幅提升。不过这种方式也存在巨大的缺陷,一是安装应用时需要全面编译,用户等待安装的时间过长;二是安装过程中翻译出来的机器码占用了大量的内存空间。
因此,Google 为在安装时间、内存占用、电池消耗和性能之间获得折中方案,又于 Android 7.0 版本重新加入了 JIT 编译模式,即当前的 Android 系统引入的是包含编译、解释和 JIT 的混合运行时。详细而言,当 App 安装时,首先不用像 Android 6.0 中对应用进行完整的预编译,而会根据 JIT 编译器的分析结果,一方面,在设备充电或其余空闲时间对「cold code」进行解释;另一方面,对「hot code」在实际使用时由 JIT 进行编译。
来源:https://source.android.google.cn/devices/tech/dalvik/jit-compiler
以上即为华为所述的原有 Android 系统存在边解释边执行的低效现象,至于方舟编译器如何达成全程执行机器码高效运行程序的?
由于该项目暂时还上线开源,目前尚未可知。不过对此不少开发者猜测,方舟编译器更可能是直接将应用程序的安装包,即 APK 打包成机器码格式,得以让系统可以直接识别。最终结果我们还需等待该项目开源之后才能揭晓谜底。
华为方舟编译器将会对 Android 系统带来什么样的影响?
不过,余承东于现场表示,通过方舟编译器,不仅可以解决应用卡顿的问题,还可以为系统操作流畅度提升 24%、系统响应速度提升 44%,第三方应用操作流畅度提升 60%。同时余承东也呼吁,希望 App 开发厂商尽快使用。
这样看起来,性能大幅提升之后的 Android 应用与 iOS 系统中的应用差距正在逐步缩小,甚至大有超过的趋势。事实上,方舟编译器能实现这样的性能提升,无论是对企业、开发者,还是对用户而言,也无疑都是一件好事。而对于华为本身而言,从上个月余承东在接受德国《世界报》采访时表示华为
已经为智能手机和电脑开发了自己的操作系统
,以防美国科技巨头不再向其授权现有系统后,到这一次透露即将开源的编译器,整体也可看成是华为正在为其尚未面世的操作系统的生态系统布局做好充足的准备。那么,对此,你怎么看?
参考:
https://m.mydrivers.com/yidian/newsview.aspx?tid=523860&s=cm
https://blog.csdn.net/yifanyingying/article/details/79368410