Android虚拟机
Android4.4版本以前是Dalvik虚拟机,4.4版本开始引入ART虚拟机(Android Runtime)。在4.4版本上,两种运行时环境共存,可以相互切换,但是在5.0版本以后,Dalvik虚拟机则被彻底的丢弃,全部采用ART。
ART
ART 是一种执行效率更高且更省电的运行机制,执行的是本地机器码,这些本地机器码是从dex字节码转换而来。ART采用的是AOT(Ahead-Of-Time)编译,应用在第一次安装的时候,字节码就会预先编译成机器码存储在本地。在App运行时,ART模式就较Dalvik模式少了解释字节码的过程,所以App的运行效率会有所提高,占用内存也会相应减少。谷哥在5.0以后的Android版本中默认了ART模式启动,就是希望Android能摆脱卡顿这个毛病。
Dalvik
Dalvik 虚拟机采用的是JIT(Just-In-Time)编译模式,意思为即时编译,我们知道apk被安装到手机中时,对应目录会有dex或odex和apk文件,apk文件存储的是资源文件,而dex或odex(经过优化后的dex文件内部存储class文件)内部存储class文件,每次运行app时虚拟机会将dex文件解释翻译成机器码,这样才算是本地可执行代码,之后被系统运行。
Dalvik虚拟机可以看做是一个Java VM,他负责解释dex文件为机器码,如果我们不做处理的话,每次执行代码,都需要Dalvik将dex代码翻译为微处理器指令,然后交给系统处理,这样效率不高。为了解决这个问题,Google在2.2版本添加了JIT编译器,JIT编译器会将热点代码编译为本地可执行码,加快执行速度
ART优缺点
优点
1、系统性能的显著提升
2、应用启动更快、运行更快、体验更流畅、触感反馈更及时
3、更长的电池续航能力
4、支持更低的硬件
缺点
1、更大的存储空间占用,可能会增加10%-20%
2、更长的应用安装时间
Android N(7.0)优化
Android N 开发者预览版包含了一个混合模式的运行时。应用在安装时不做编译,而是解释字节码,所以可以快速启动。ART 中有一种新的、更快的解释器,通过一种新的 JIT 完成,但是这种 JIT 的信息不是持久化的。取而代之的是,代码在执行期间被分析,分析结果保存起来。然后,当设备空转和充电的时候,ART 会执行针对“热代码”进行的基于分析的编译,其他代码不做编译。为了得到更优的代码,ART 采用了几种技巧包括深度内联。
对同一个应用可以编译数次,或者找到变“热”的代码路径或者对已经编译的代码进行新的优化,这取决于分析器在随后的执行中的分析数据。这个步骤仍被简称为 AOT,可以理解为“全时段的编译”(All-Of-the-Time compilation)。
这种混合使用 AOT、解释、JIT 的策略的全部优点如下。
1、即使是大应用,安装时间也能缩短到几秒
2、系统升级能更快地安装,因为不再需要优化这一步
3、应用的内存占用更小,有些情况下可以降低 50%
4、改善了性能
5、更低的电池消耗
https://blog.csdn.net/johnWcheung/article/details/102657024
https://tobebetterjavaer.com/jvm/jit.html#%E4%BA%8C%E3%80%81java%E7%9A%84%E6%89%A7%E8%A1%8C%E8%BF%87%E7%A8%8B
https://www.infoq.cn/article/2016/04/android-n-aot-jit