进化史带您版本发展历史Android(编译执行代码编译器版本)「安卓代码编译器」

进化史带您版本发展历史Android(编译执行代码编译器版本)

在智能手机领域,Android手机的销量占据着绝对的霸主地位,市场占有率达到了惊人的将近80%之多。
一直以来,很多人提到Android系统,第一印象可能是卡顿、速度慢。
至于速度慢的原因,我在上一期的文章中,已经有进行全面的分析了,大家可以具体查看《彻底搞懂Android系统比苹果IOS系统慢的原因》。
今天我要改变大家对Android的印象,大家要以发展的眼光看待事物,现在已经是2021年了,经过十几年的发展,Android的用户体验已经非常流畅、快速了。
这得益于Google一直致力于Android运行机制的提升。
安卓系统借此机会,我来给大家详细分享一下,Google这些年Android系统进行优化、提升的历程。
一、Android诞生在2007年底,谷歌公司首次推出了Android系统,这里简单说明一下,Android系统其实是由开发手机联盟共同开发的,这是一个全球性的组织,由Google公司倡导发起,其成员很多世界性的伟大企业,如高通、三星、中国移动、华为等。
因此,Android能得到了众多巨头企业的支持,也就能够得到快速的发展、推广。
开放手机联盟Google采用Java作为Android系统中,应用软件的开发语言,因此,Android应用软件也是基于Java虚拟机的运行机制。
针对移动端的硬件特性,Google对Java虚拟机进行了重新设计,命名为Dalvik虚拟机,Dalvik在软件执行时,将字节码(Java程序开发完,打包后的代码)解释成处理器指令,以便操作系统进一步处理、执行。
跟传统基于栈架构的Java虚拟机不同的是,Dalvik是基于寄存器架构,寄存器是更靠近CPU的存储架构,因此,运行速度相对会更快。
另外,Dalvik处理的是更加精简的Dex字节码,这就进一步提升了执行效率,满足移动端硬件的要求。
Android架构图二、JIT编译器随着Android系统的发展需求,Dalvik虚拟机的弊端越发显现出来,软件每次运行,都需要对字节码进行解释,严重影响性能、执行效率。
为此,Google在2010年发布的Android 2.2版本中,增加了JIT编译器,Just-In-Time Compiler,即时编译器。
JIT编译器的加入,带来了以下好处:首先,JIT编译后的指令码非常的精简,执行效率非常高。
其次,JIT对字节码进行分析,优先编译需要经常执行的代码,另外,编译后的代码会被缓存,因此,只有遇到新的代码才会进行编译,这样不仅减少了编译的工作量,还大大减少了内存的消耗。
三、ART虚拟机JIT编译器的加入,虽然提升了性能,但还是需要在软件执行的时候编译代码,编译的操作本身就会带来额外的消耗,还是会影响运行时性能。
有没有更加优化的方案呢?答案是当然有,Google在2013年10月发布的Android 4.4中,又给了 我们很大的惊喜。
在这个版本中,带来了全新的ART虚拟机运行环境,以及全新的编译策略AOT(Ahead-of-time)。
AOT是采用预先编译的策略,即在软件安装时,就一次性将字节码编译成可在设备上直接执行的本地机器码。
这也就意味着,软件在运行过程中再也不需要进行编译代码的动作了,直接执行机器码。
带来的好处,是运行速度大大提升,并且省电。
另外,ART也在垃圾回收方面进行了优化。
当然,AOT也有一些缺点,安装时间较长、软件安装后体积占用变大,但总体来说,还是好处大于缺点的。
Android 4.4时,Dalvik、JIT、ART、AOT共存,在Android 5.0后只有ART+AOT的模式,标志着Dalvik彻底完成了自己的历史使命。
四、JIT的回归针对AOT的缺点,Google找到了新的解决办法。
在2016年8月发布的Android 7.0版本,Google让JIT编译器又回到了我们的视线,从而形成了JIT/AOT混合编译的策略。
在该版本中,应用在安装时不再进行编译,因此安装时间变短,软件的体积也变小了。
软件在执行时,对当前需要执行到的代码,还是采用JIT编译策略,即遇到新代码时,进行编译、缓存,已被编译过的代码则直接执行缓存。
另外,JIT还会对软件中的其它所有热点函数(需经常执行的代码)进行分析、识别,并将分析结果保持到profile文件中。
当手机处于空闲时,AOT编译器,就会扫描profile文件,对其中记录的热点代码进行AOT编译。
这样,只对执行概率比较高的代码进行提前编译,并且是在空闲的时间进行编译,既减小了体积,又提升了系统的性能。
最后,用一张图带您快速了解,安卓系统优化简史:版本历史

联系我们

在线咨询:点击这里给我发消息