安卓7.0为什么这么快?深入浅出解析秘密(读书笔记)

2016年8月份,Andioid Nougat(Andiord版本为7.X,以下简称为Andioid N)第一个正式固件推送。作为一整个年度的大版本更新,Andioid N为我们带来了近250项新特性。而其中最受消费者关注的,莫过于应用安装速度的巨大提升,以及应用安装后,更低的存储空间占用。



在感受Android N所带来飞快体验的同时,你一定会有这样的疑问:为什么应用的安装速度提升如此地明显。并且应用的空间占用还变小了?

在解答这个问题前,我们需要先来了解几个基本概念,它们是Android N中,使得应用安装速度变得如此之快的核心,分别是:JIT、ART和AOT。

JIT编译器(Just in time )
JIT的全称是Just in time compilation,中文称之为即时编译,指的是动态编译的一种形式,用于提高程序的运行效率。值得注意的是,这里说的是广义上的JIT,在Android中,人们通常把以JIT编译形式工作的编译器称为JIT编译器。这个时候,我们应当把JIT理解为Just In Time Compiler,也就是我们常说的即时编译器。
现在,我们要来深入了解一下JIT编译器。
谈到JIT编译器,我们就不得不提到,安卓最初的一些程序特性。在安卓诞生之初,其运行程序的核心组件依赖于一个叫做Dalvik的运行环境,又称为Dalvik虚拟机,它的作用是用于运行.dex(Dalvik Executable)格式的程序,由名字可以看出来,.dex格式是专为Dlavik设计的一种压缩格式,对于当时安卓设备有限的硬件机能来说非常合适。
那么Dalvik跟JIT编译器有什么关系呢?我们上面也提到了,在硬件机能有限的当时,Dalvik确实算是一个合适的解决方案。但是,时代在发展,安卓硬件的发展速度大家也都有目共睹,很快一个单纯的Dalvik虚拟机满足不了日益发展的硬件了。
于是,谷歌在Android 2.2版本中提出了使用JIT提高安卓的运行速度的方案。此后,JIT编译器便与Dalvik虚拟机如同共生关系般,一直为后续版本所支持。直至Android 4.4版本。因为在Android 4.4以后,Dalvik与JIT将结束它们的历史使命,转而由一个全新的后辈来接替它们,它就是-ART。

ART(Android Runtime)
ART是Android 4.4以后,用于取代老前辈Dalvik的全新运行环境,我们也可以把它称之为ART虚拟机。那么新的ART带来了什么呢?
首先回忆一下,为了提高Dalvik的运行效率,谷歌在Android 2.2后引入了JIT,而与之对应的,ART则带来了全新的AOT技术。

AOT(Ahead-of-time)
AOT是谷歌在ART中引入的一种全新的编译策略,又可以称其为预编译技术。它与JIT最核心的差异是:JIT是一种动态编译技术,而AOT则属于静态编译。它们运行方式的不同在于:JIT是运行时编译,可以对执行次数频繁的dex代码进行编译与优化。使得在Dalvik中运行应用的响应时间大大减小。
而AOT预编译策略使得ART在应用第一次安装时就完成了所有的编译工作,使得应用程序接近原生应用,之后打开应用时,不再需要额外的翻译工作,直接使用本地机器码运行,因此运行速度大大提升。

Android N 与 Android M对比实测
以上的一些基本概念理解完毕,现在,为了理解Android N的“极速之谜”,我们选用了Android N与Android M(Android版本号为6.X)作对比,不选用其他版本的原因也很简单,差距太大没有可比性。并且Android N之所以安装快的原因也可以从两个大版本之间的一些改动中找出来。(原计划有视频,已pass)

经过实测,应用的安装速度几乎提升了一倍,同时在Android N中,应用的体积不增反减,这是如何做到的呢。
其实答案已经在上面所说的三个基础概念之中了。在Android M中,ART的编译策略是如上所说的AOT预编译,因此使得应用的执行效率无限接近原生应用。但是随之带来的坏处便是在应用安装时,ART需要花大量的时间将应用编译成原生指令。
想必你已经知道了,Android N的“极速之谜”谜底便是剩下的这个——JIT。

Android N安装应用为什么这么快
如大家所想,谷歌在Android N中,JIT即时编译器再次回归,使之成为了一种JIT/AOT混合编译模式。在Android N中,应用在安装时不再做编译,而是解释字节码。省去了冗长的编译时间,安装速度自然大大提升。
这个时候你可能就有新的疑问了,在应用安装时不做编译,那应用执行起来不是会变得很慢么?然而事实上是,Android N中的应用执行速度相比Android M并没有太大的差异,甚至使用一段时间后,Android N的应用执行速度比Android M还要快上不少。
这就要归功于新加入的这个JIT/AOT混合编译技术了。新增的JIT编译器用于对ART进行代码分析,使之可以在应用运行时,持续优化Android应用的性能。使得安装时不做编译,也能达到与安装时完整编译一样的效果。这种编译模式我们依旧同称为AOT,只不过它的含义不再是预编译,而是全时编译技术(All Of the Time compilation)。
此外,JIT的分析结果会被保存起来。当Android设备空闲或充电时,ART就会根据JIT的分析结果,将代码中的常用方法进行编译,而不常用的方法则待到需要时再编译,因而省下了部分存储空间。直观的体现就是我们安装完应用后,存储空间的占用变少了。

应用占用空间对比
根据实测,手机淘宝6.5.0安装完后在Android M中占用空间为171MB,而Android N中占用空间为156MB。王者荣耀1.17.1.23安装完后在Android M中占用空间为439MB,在Android N中占用空间为428MB。以下为个人推测,王者荣耀在两个版本中的占用空间差没有手机淘宝的大的原因,很可能是因为手游中多为常用的交互代码,而手机淘宝中大多数交互都能在web中完成,因而不常用的代码可能更多。造成了这个现象。

总结
最后总结一下。
Android N安装应用快,是因其在安装时只解释字节码,省去了编译所用的时间。之所以能省去编译环节,是因其加入了全新的AOT全时编译技术,使得应用执行效率保持与Android M相同甚至更好。因而ART不再编译所有代码,所以省下了部分存储空间。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 210,914评论 6 490
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 89,935评论 2 383
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 156,531评论 0 345
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,309评论 1 282
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,381评论 5 384
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,730评论 1 289
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,882评论 3 404
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,643评论 0 266
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,095评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,448评论 2 325
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,566评论 1 339
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,253评论 4 328
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,829评论 3 312
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,715评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,945评论 1 264
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,248评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,440评论 2 348

推荐阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 171,730评论 25 707
  • 两年前阿里开源了Dexposed 项目,它能够在Dalvik上无侵入地实现运行时方法拦截,正如其介绍「enable...
    weishu阅读 4,569评论 3 42
  • 我不曾存在过 将来那个人 也不是我 我爱护好这个身体 为的是交给将来的我 他是我永远不会见面的朋友 我为他备忘 为...
    马优MARS阅读 248评论 0 0
  • 掌门_艾老师阅读 221评论 0 1
  • 只有在家里,才能意识到浓浓的绿意,才知四季的分明,西墙外的绿茵,绿的着了重色,一入院一抬眼恍若一片森林,林中有鸟,...
    梧桐兮兮阅读 267评论 0 0