方舟编译器和超级文件,深挖方舟编译器
方舟编译器和超级文件,深挖方舟编译器随后一直发展到现在,目前的Android采用的是解释执行 JIT AOT 的模式,但并没有摆脱一个前提,即应用在被打包成APK的时候,采用的还是Java代码。在 Android 5.0至Android 6.0 阶段,Google推出了ART来解决之前的 Java 代码执行效率问题。这个阶段采用的是完全AOT模式,但随即又带来另个两个问题,安装应用慢和占用内存空间。简单来说,编译器就是把编程人员开发的高级语言程序,翻译成机器可执行的机器指令,这就是编译器。它就像一位翻译官,是连接程序员与机器的桥梁。由此来看,方舟编译器面向的是开发者,但最终会回馈于用户身上。在了解方舟编译器之前,我们必须得首先了解 Android 操作系统中的编译器的运行机制。当前 Android 平台的绝大多数应用是使用 Java 语言写的,CPU 只能理解汇编指令,无法直接识别 Java 语言的虚拟机指令。在 Andro
2019年4月11日,在上海的华为新品发布会上。余承东亲自公布两项软件层面的“重磅炸弹”,分别是方舟编译器和 EROFS 超级文件系统,这一时间引起了业界的热烈讨论,但也有不少人是一头雾水。
方舟编译器和EROFS超级文件系统究竟是什么?它们为什么能引起革命?下面就让我们带着疑问去解读。
华为方舟编译器 安卓性能革命
编译器是什么?
简单来说,编译器就是把编程人员开发的高级语言程序,翻译成机器可执行的机器指令,这就是编译器。它就像一位翻译官,是连接程序员与机器的桥梁。由此来看,方舟编译器面向的是开发者,但最终会回馈于用户身上。
在了解方舟编译器之前,我们必须得首先了解 Android 操作系统中的编译器的运行机制。当前 Android 平台的绝大多数应用是使用 Java 语言写的,CPU 只能理解汇编指令,无法直接识别 Java 语言的虚拟机指令。
在 Android 平台上,代码编译经历了数个阶段。在 Android 5.0 正式采用 ART 之前,Android 采用的是解释执行 JIT 的方式执行 Java 代码。在这个阶段的系统是“边解释边执行”模式,代码效率比较低下,当时Android给人的感觉就是卡。
在 Android 5.0至Android 6.0 阶段,Google推出了ART来解决之前的 Java 代码执行效率问题。这个阶段采用的是完全AOT模式,但随即又带来另个两个问题,安装应用慢和占用内存空间。
随后一直发展到现在,目前的Android采用的是解释执行 JIT AOT 的模式,但并没有摆脱一个前提,即应用在被打包成APK的时候,采用的还是Java代码。
小结:总之现在Android系统有一个绕不过去的坎,即为虚拟机(Virtual Machine,简称 VM),它包含翻译器和编译器,其目的就是把 Java 高级语言转换成机器能懂的语言,也就是因为这一转换过程导致了Android的卡顿现象。
反观苹果的iOS系统,直接使用Clang/LLVM来编译出机器码,就没有安卓还要一个中间层那么麻烦,也因为如此,所以我们感觉iOS系统一般更流畅,虽然这只是原因之一。
方舟编译器牛在哪?它绕过了虚拟机
从华为官方得知,其5年前就已经开始布局编译器技术,聘请了世界顶级的编译专家,投入了数百人专家团队才攻克了编译器技术,然后在EMUI 9.1上实现了机器代码的翻译。
从Android操作系统的代码运行逻辑我们得知,华为编译器最大的优势在于它绕过了虚拟机。简单来说,方舟编译器可以将高级语言(Java)直接变成机器码,无需再通过 Android 系统中内置的编译器。
总之,方舟编译器是完全替代了语言虚拟机的静态编译器,从此不再需要解释器。相比现有的编译机制有以下明显优势:
1、方舟编译器是一种静态的编译方式。而现有的安卓系统,运行一个应用程序首先启动虚拟机,然后读入应用代码逐条解释执行,无法做到100%做到摆脱虚拟机,这也是当前安卓阵营面临的问题。
方舟编译器编译的应用在开发阶段就已完成,简单理解,只要是经过编译器编译的应用,在应用市场上架以后,用户下载的APK 就是编译好的了。
2、华为方舟编译器的静态编译方式可将语言里的动态特性直接翻译成机器码。手机安装应用程序后可全速运行程序,彻底干掉了虚拟机,极大提升了系统运行效率。
方舟编译器对于系统在这方面的提升,官方描述说:
第一点,EMUI 9.1对系统主要服务System Server进行静态编译化,带来了系统流畅度提升24%,系统响应性能提升44%以上的收益。
实测微博极速版加载速度对比,荣耀9X PRO明显加载更快
第二点,微博极速版实现了静态化编译后,流畅度提升高达60%。
方舟编译器还带来新的垃圾回收机制
此外,方舟编译器还带来了新的系统垃圾回收机制。以往安卓的垃圾回收机制是集中回收,由于Java虚拟机的特点,系统会不断地对内存进行标记。永不停歇地自动回收内存垃圾,保证内存不会溢出是Java的一大特点。
可用内存低于某个标准值后,它就会自动关闭优先级低的进程。一旦被触发应用紧接着就被系统杀掉,随机造成莫名的卡顿。比如,启动游戏时,点按app进入前感觉莫名的卡顿,界面像是抽搐了一下。
而方舟编译器做了什么改变呢?它的内存回收机制是随用随回收,够佛性吧!回收时不需要暂停应用而回收内存垃圾,这大大提高了系统运行速度。
方舟编译器将对外开源
华为方面已经表示,方舟编译器也将开放给第三方合作伙伴。其表示后续会在 2019 年 11 月的绿盟开发者大会实现完整方舟编译器代码开源,让广大的应用开发者、手机厂商加入进来,共同构建开发者生态,使安卓体系做得更强大。
未来方舟编译器是否能成功,还要看后续完整生态的搭建。希望开发者积极参与进来,最终给消费者带来更为极致的体验。
ROFS超级文件系统 随机读取再提速
4K固定压缩输出 节省内存,提升速度
2016年搭载EMUI 5.0的华为Mate 9,首次在业界规模商用F2FS文件系统,替代了传统的EXT4文件系统,令用户分区的文件读写流畅度提升20%。这次,为了验证EROFS超级文件系统在随机读取性能上的再次提升,我们用AndroBench来测试
左为某骁龙855旗舰手机 右为某麒麟810手机
从测试结果来看,搭载麒麟810的机型,得益于EROFS超级文件系统的加持,在连续读取(902.39MB/S)和4K随机写入(232.58MB/S)都要明显高于搭载骁龙855旗舰的机型,其他像连续写入和随机4K读取两者相差不大。
EROFS超级文件系统通过高效的压缩算法加持,带来随机读性能提升,EROFS的做法是保证每次压缩一块,正好是一个固定大小的存储块。这样几乎没有浪费,不仅性能提升随机读性能的20%,ROM空间还节约了2GB。
以华为P30 Pro 128G为例,系统初始空间相比Ext4节省2GB,相当于用户可以多存1000张照片或500首歌曲。而且体现在,系统升级上同样能够省时。官方表示,采用EROFS后,升级包大小下降约5%-10%,升级时间缩短约20%。
EROFS是天然只读 更安全
为了避免系统分区被篡改,Android将系统分区设置成只读的。Ext4是一个读写双向的文件系统,为了防止读写系统区,要加两把锁才能更安全。这两把锁加上,这个机制就变得更复杂了。
这解决这个问题,EROFS超级文件系统是天然只读设计,系统分区不可被三方改写。因为一旦系统区被写就意味着系统被攻破了,所有运行管理保证它的正确性,所以不能被改写意味着更安全。这就相当于筑起了一道防火墙,系统分区变得更加安全了。
写在最后
十年磨一剑,华为能取得今日的突破并非一日之寒。从方舟编译器和EROFS超级文件系统这里我们就能看出华为对研发的投入,以及对生态的规划,并不只是说说而已,华为的终极目标或许是全方位的生态搭建。
方舟编译器和EROFS超级文件系统就是这生态搭建过程中的一步体现,我们期待未来这两项技术能够普及开来,促进Android体系更加强大,也希望华为能在未来带给我们更多惊喜。