JIT AOT Davlik ART

一、

JIT  是just In time compile的缩写,就是“即时编译技术”,用于Davlik虚拟机

AOT  “Ahead of Time”的缩写,提前编译,运行前编译,一般在安装时就将字节码翻译成机器码

dalvik这个大家肯定很熟悉 Dalvik是Google公司设计用于Android平台的Java虚拟机 ,使用dex,odex(优化后)

Art是(Android runtime) 在Android系统4.4提出 在5.0之后完全弃用dalvik 全部采用art为执行环境,使用ota文件

文件格式 oat dex和odex

dexDalvik Executable)格式是专门为Dalvik设计的一种压缩格式,

        (javac)          (dx工具)

.java——>.class——->.dex

.java文件经过javac编译器生成.class字节码 再经过。dx工具生成.dex

odex(optimized dex)即优化的dex

对于在dalvik环境中 使用dexopt来对dex字节码进行优化 生成odex文件 最终存在手机的data/dalvik-cache目录下

对于art环境,使用dex2oat工具来对dex字节码生成oat文件

 

二、

使用Java开发Android ,在编译打包apk时,要经过以下过程

java源码->class文件->通过dx工具转换成dex文件->经过签名,对齐等操作变成apk

Davlik相当于更上一层的Java VM,负责将dex解释成机器码,如果不做处理的话,每次执行代码,都需要重新解释一遍

Google2.2之后,引入了JIT,遇到新类时,JIT编译器就会对它进行编译,优化成精简的原生型机器码(native code),下次遇到相同的类时不需要再次解释,速度会更快

如果大部分代码执行次数很少,JIT编译带来的消耗可能大于执行dex的时间,所以JIT不会编译所有代码,只会编译执行次数较多的代码

三、

但是,dex字节码翻译成本地机器码是发生在应用运行过程中,如果应用重启启动,需要重新做这个翻译工作(JIT),于是AOT和

ART应运而生,ART是用来代替Dalvik的,4.4引入,5.0以上,全部采用ART

ART的 策略和Davlik不同,在ART环境中,应用在第一次安装时就会将字节码编译成机器码,使其成为真正的本地应用,之后打开app的时候,不需要额外的翻译工作,直接使用本地机器码运行,提高运行速度

四、

ART缺点:

1、ART会消耗更多的存储空间,一般不会超过原来代码包20%

2、安装应用世间会边长

五、Android N引入了一种新的编译模式,同时使用JIT和AOT

包含了一种混合模式的运行时,应用安装时不做编译,而是解释字节码,所以可以快速启动。

ART中有一种新的,更快的解释器,通过一种新的JIT完成,但是这种JIT信息不是持久化的,取而代之的是,代码执行期间

被分析,分析结果保存起来,然后,当设备空转和充电的时候,ART会执行鍼对“热代码”进行的基于分析的编译,其他代码不做

编译

为了得到更优的代码,ART采用了几种技巧包括深度内联。

对同一个应用可以编译数次,或者找到变“热”的代码路径或者对已经编译的代码进行新的优化,这取决于分析器在随后的执行中的分析数据。这个步骤仍被简称为AOT,可以理解为“全时段的编译”(All-Of-the-Time compilation)。

这种混合使用AOT、解释、JIT的策略的全部优点如下。

  • 即使是大应用,安装时间也能缩短到几秒
  • 系统升级能更快地安装,因为不再需要优化这一步
  • 应用的内存占用更小,有些情况下可以降低50%
  • 改善了性能
  • 更低的电池消耗

 

https://blog.csdn.net/u011326979/article/details/50748181

https://www.jianshu.com/p/de695c2d4a42

https://source.android.google.cn/devices/tech/dalvik/jit-compiler?hl=zh-cn

点赞