华为又要牛逼了?方舟编译器来袭?
Posted 冷月白狐
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了华为又要牛逼了?方舟编译器来袭?相关的知识,希望对你有一定的参考价值。
华为最近又开始搞事了!
P30系列国行发布会上,华为公布了革命性的——“方舟编译器”,通过架构级优化,将安卓的性能提升到一个新的台阶,特别是全程执行机器码,高效执行应用,彻底解决安卓系统原有的“边解释边执行”造成的低效率。
根据华为所说,方舟编译器能让系统操作流畅度提升24%,系统响应速度提升44%,第三方应用重新编译后流畅度提升60%!
WHF?这么牛逼?
估计很多朋友不知道这是怎么回事,机器码是啥?「边解释边执行」又是啥?华为干了啥,所以,在这里我跟大家科普一下:
安卓平台的大部分应用是使用 Java 语言,CPU 仅能理解机器指令,无法直接识别 Java 虚拟机指令;为了让 CPU 运行 Java 程序,基本就是两种办法:
「计算机科学领域的任何问题都可以通过增加一个间接的中间层来解决」,所以说, 引入一个中间层,中间层负责 Java的执行,接着中间层本身编译为 CPU 能理解的汇编指令,也就是 CPU到中间层到Java 代码。如果这个中间层采用 Java 语言直接作为输入,理解一句 Java 语句就把Java语言翻译一下让CPU 执行一段,我们一般称这种模式为「解释执行」。毋庸置疑这种方式效率是相当低效的。
直接把 Java 语言翻译成 CPU 能理解的机器语言。这里又有两种方式:
在程序运行之前直接把 Java 代码编译为机器语言。这种模式我们称之为 AOT (Ahead of time)编译。
在程序运行起来之后,实时地把 Java 语言编译为机器语言然后执行。这种模式称之为 JIT(Just in time) 编译。
现在的安卓是边解释边执行的吗?说是或者不是都可以。上面我已经提到了,现在的安卓是解释执行+还算可以的JIT+AOT 的模式。并且,你也可以手动把应用的代码全部提前编译达到完全 AOT 的效果(很多答案里面提到的 AOT 就是说的这种);不过这属于开倒车,Google 肯定不会这么做。这样做效果有多大呢?之前某大佬在支付宝做性能优化的时候,干过这么一回事:让应用在后台运行的时候请求系统直接采用 everything 模式编译支付宝,本地测试启动速度有爆炸性提升(30%~50%);但是灰度测试的时候效果不明显,为什么呢?第一,后台全编译运行成功率低;第二,系统的 JIT + 后台 AOT 不是吃素的;考虑到耗电/占空间的问题压根没上线。所以如果华为只是简单地用这种方式去避免所谓的「边解释边执行」那就是根本没啥卵用,但是个人觉得华为不至于去干这种事打自己脸。
除了安卓系统的这种 AOT 之外,难道没有别的办法了吗?稍微猜测一下,方舟编译器是不是在安卓应用打包成APK的时候,直接把 Java 代码编译为了机器码?注意这个跟安卓系统的那个AOT是不一样的,系统是在应用安装或者系统空闲的时候做编译;这种方式你下载到的安装包就是编译好的了,不需要系统动手(这就让我很难受了啊)。
如果是第一种,辣鸡华为。如果是第二种,那就很牛逼了!!!当然还有别的可能,不管咋样,静待开源 :)
当然,这对我而言不一定是一件好事,因为方舟编译器上线以后,我手头所有破解游戏又要多做一种适配,重新编译一遍!新出的安卓10已经够让我头疼的了!希望方舟编译器可以让我少操点心,顺便祈祷安卓10可以慢点普及。
以上是关于华为又要牛逼了?方舟编译器来袭?的主要内容,如果未能解决你的问题,请参考以下文章