JIT与Dalvikandroid
JIT是"Just In Time Compiler"的缩写,就是"即时编译技术",与Dalvik虚拟机相关。缓存
怎么理解这句话呢?这要从Android的一些特性提及。工具
JIT是在2.2版本提出的,目的是为了提升Android的运行速度,一直存活到4.4版本,由于在4.4以后的ROM中,就不存在Dalvik虚拟机了。优化
咱们使用Java开发android,在编译打包APK文件时,会通过如下流程翻译
以后通过签名、对齐等操做变为APK文件。code
Dalvik虚拟机能够看作是一个Java VM,他负责解释dex文件为机器码,若是咱们不作处理的话,每次执行代码,都须要Dalvik将dex代码翻译为微处理器指令,而后交给系统处理,这样效率不高。开发
为了解决这个问题,Google在2.2版本添加了JIT编译器,当App运行时,每当遇到一个新类,JIT编译器就会对这个类进行编译,通过编译后的代码,会被优化成至关精简的原生型指令码(即native code),这样在下次执行到相同逻辑的时候,速度就会更快。编译器
固然使用JIT也不必定加快执行速度,若是大部分代码的执行次数不多,那么编译花费的时间不必定少于执行dex的时间。Google固然也知道这一点,因此JIT不对全部dex代码进行编译,而是只编译执行次数较多的dex为本地机器码。虚拟机
有一点须要注意,那就是dex字节码翻译成本地机器码是发生在应用程序的运行过程当中的,而且应用程序每一次从新运行的时候,都要作重作这个翻译工做,因此这个工做并非一劳永逸,每次从新打开App,都须要JIT编译。编译
另外,Dalvik虚拟机从Android一出生一直活到4.4版本,而JIT在Android刚发布的时候并不存在,在2.2以后才被添加到Dalvik中。
ART与AOT
AOT是"Ahead Of Time"的缩写,指的就是ART(Anroid RunTime)这种运行方式。
前面介绍过,JIT是运行时编译,这样能够对执行次数频繁的dex代码进行编译和优化,减小之后使用时的翻译时间,虽然能够加快Dalvik运行速度,可是仍是有弊病,那就是将dex翻译为本地机器码也要占用时间,因此Google在4.4以后推出了ART,用来替换Dalvik。
在4.4版本上,两种运行时环境共存,能够相互切换,可是在5.0+,Dalvik虚拟机则被完全的丢弃,所有采用ART。
ART的策略与Dalvik不一样,在ART 环境中,应用在第一次安装的时候,字节码就会预先编译成机器码,使其成为真正的本地应用。以后打开App的时候,不须要额外的翻译工做,直接使用本地机器码运行,所以运行速度提升。
固然ART与Dalvik相比,仍是有缺点的。
可是这些与更流畅的Android体验相比而言,不值一提。
总结
经过前面背景知识的介绍,我终于能够更简单的介绍这四个名词之间的关系了: