去年三月份,Google发布了首个Android 7.0(Android Nougat)测试版,五月份发布正式版,虽然至今Android 7.0不足5%的市场占有率,足以让苹果笑掉大牙,但是随着三四月份新机扎堆发布,Android 7.0肯定会迎来一波爆发。或许你会问,Android 7.0有什么好的,我现在用6.0稳定得很呢,倒还真有一个能让你有真切感受的变化,用我们小超哥的话讲就是“震惊!Android 7.0应用安装速度飙升666%!”,你还别不信,先看看小超哥做的一个与Android 6.0的对比视频:
Android 7.0与Android 6.0应用安装速度对比
视频中用的测试手机为Nexus 5X,在Android 6.0中,安装同一版本的手机淘宝用时28秒,升级到Android 7.0后,安装手机淘宝仅用时14秒,请问你震惊了吗?
下次有基友或妹子问你Android 7.0有什么好的时候,你完全可以大胆告诉他们,Android 7.0的软件安装速度快了一倍啦~~~~不信你上超能网看看对比视频,万一妹子惊呆了,追问一句,怎么会快这么多呢,你肯定不能回答不知道吧,所以我军从不打无准备之仗,要做一个脱离低级趣味一个有益于人民一个BIGGER满满的人,你必须往下看。
Android 4.4时的JIT解决方案
故事还得回到几年前,还是Android 4.4的时代,那时Android还是用的Dalvik虚拟机,配合的是JIT编译器(Just In Time,即时编译器),其实Google在Android 2.2时就添加了JIT。当APP运行时,JIT编译器就会对新类进行编译,经过编译后的代码,会被优化成相当精简的原生型指令码,这样在下次执行到相同逻辑的时候,速度就会更快。
JIT是在运行时编译,优缺点很明显,安装速度快占用存储空间小,主要问题是在运行时编译开销大,容易造成卡顿,所以在这之后,Google果断壮士断腕,在Android 5.0和Android 6.0中放弃了Dalvik转投ART(Android Runtime)虚拟机怀抱,编译策略也弃JIT改用AOT(Ahead Of Time)方案。
Android 6.0采用了AOT编译方案
ART的策略与Dalvik不同,应用在第一次安装的时候,字节码就会预先编译成原生型指令码,使其成为真正的本地应用。以后运行APP时,不需要再进行编译,启动速度和运行速度都提高了,也就不那么卡顿了。
但是这种方案也有明显缺点,就是在安装中要全面预编译,安装时间难免长,而且会消耗掉更多的存储空间,根据我们的测试,手机淘宝这个APP在Android 6.0系统中应用存储大小为171MB,在Android 4.4系统中占用为154MB,相当于占用空间多了10%。截图就不贴了,有兴趣的朋友可找小超哥(微信9501417)索取。
在Android 7.0中,Google进一步改进了编译策略,这次他直接来了个Hybrid Mode,也就是AOT + JIT混合模式,糅合了两者的优点:
Android 7.0的编译策略
Google是这么说的:Android 7.0添加了一个JIT编译器与代码分析到ART,JIT编译器是对ART当前的AOT编译器的一个补充,提高运行时性能,节省存储空间,加快应用程序更新和系统更新。
在Android 7.0中,安装应用时不再像6.0那样对应用代码进行完整的预编译,而是会根据JIT编译器的分析结果,在设备充电或其余空闲时间对“cold code”进行解释,对于“hot code”,则在实际使用时由JIT进行编译,因此应用安装时间和占用空间大大减少了,像手机淘宝这个APP在Android 7.0系统中的占用大小为156MB,和Android 4.4系统中非常接近。主要的是,它还不会影响到应用的运行速度。
Android 7.0中的JIT架构 - 它是如何工作的
总结一下,在Android 7.0,采用了AOT + JIT混合编译策略,带来的好处如下:
﹒APP安装时间大幅缩短,只有Android 6.0系统的50%;
﹒系统升级OTA速度加快,不再需要优化;
﹒应用占用空间更少,一般会少10%;
﹒降低系统开销,改善电池消耗。