今年华为发布P30的时候,华为也发布了一款名为“方舟”的编译器,但是很多人都误解了方舟是什么,所以这里就详细说说。可以肯定的是,方舟并不是一个独立的操作系统!这是Android上的一个工具。方舟编译器的优势可以概括为以下五点:1.Android程序的编译效果更好;2、安卓程序安装速度更快;3、Android程序运行速度更快;减少对硬件的依赖;5.省电省电省电,重要的事情说三遍Android和Java从开始到现在,Android程序大部分都是用Java(也是C语言)写的,没必要爪哇。多的话,是世界上最大的计算机语言之一。但是懂计算机原理的人都知道,计算机的CPU只接受汇编指令。那么CPU如何才能理解Java语言程序呢?左边是JAVA程序代码,另一边是汇编代码。如果用一个中间层把Java解释成汇编语言,充当“翻译器”,那么它就变成了Java程序说一句话,它解释了一句话。这显然是高效的。太低。那么Java能不能直接变成机器激活的汇编代码呢?是的,有两种方式,一种是在程序执行之前编译模式,叫做Aheadoftime,简称AOT;另一种方式是程序运行后再编译,称为Justintime,JIT。Android早期在Android早期,也就是Android5.0之前,Android手机存在卡顿、慢、卡顿等问题,深受用户诟病。为什么?归根结底是因为当时的Android使用了中间层+JIT的垃圾模型。在这种机制下,不会很快,垃圾回收在当时也是个问题。版本,因为是源系统,稍微好一些。而且这种方法也很浪费电。因为nexus是原装系统,比国内手机厂商打包的各种UI要快一些。在Android5.0-6.0时期,Google为Android配置了ART(AndroidRuntime)。这时候就是一个完整的AOT模式了,但是也有自己的问题。因为需要先编译再执行,所以安装速度很慢,占用空间也很大。要知道当时的手机有64G的大容量,开机重启就执行一次AOT,所以速度极慢,用户体验也很差。不同之处。这也是为什么近两年来安卓手机的内存和容量越来越大的原因。现在的安卓Android7.0之后,谷歌也意识到了程序占用空间和开机慢的问题。我应该怎么办?谷歌发现人们不可能使用一个程序的所有功能。那么只编译一些常用的效率高吗?所以这时候JIT其实是拉回了Android,安装的时候不需要完全编译,直接安装就行,速度当然更快。这其实就是中间层,JIT,AOT在一起,并且根据用户的习惯,将其常用程序的常用功能代码解释存储起来,用户可以快速的再次使用。Android7.0之后,谷歌做的就是优化。8.0系统是解释器,提高了“冷代码”的解释速度。最新的10.0(AndroidQ)系统甚至在安装时就提前知道用户在这个程序中常用的是什么代码。安装时间稍微长了点,但是热点代码已经解释过了,进一步提高了速度。华为方舟优化了什么?看了上面的内容,我们就知道谷歌的计划其实是一个大杂烩。那么华为是做什么的呢?其实,华为X的牛逼之处在于它直接进入了Android的灵魂。从开始程序开发到打包APK,直接就是手机CPU能看懂的汇编指令(二进制代码),提高了效率。在方舟编译器中,编译后的APK会通过静态编译的方式转化为机器码,然后进行安装。这其实就是AOT,不需要麻烦的虚拟机,提高了运行的速度和效率。并且作为开发者,还可以根据不同的程序特点选择不同的编译优化方案,不像Android官方那样采用统一的虚拟机方案。现在安卓手机的一大特点就是内存越来越大,6GB是老手机的配置。除了程序体积大之外,这还与Android程序运行产生的垃圾量有关。那清理垃圾呢?如果需要暂停程序,就暂停一下,也就是所谓的“卡住”。华为方舟编译器利用了程序的多线程运行特性。比如你现在使用的“中关村在线”这个app使用了A和B两个线程,在华为P30手机中,当线程A运行时,线程B在清理垃圾,当线程A清理垃圾时,线程B是正在运行,程序运行不中断,垃圾处理不间断,一气呵成,节省系统资源。华为还有一个厉害的地方就是从不隐藏自己的秘密!今年8月,华为将发布方舟编译器的源代码。到时候很多手机厂商都会开始使用高效、节省资源的方舟编译器,这会给我带来更好的手机体验!
