Android虚拟机发展史

Android 2.2之前 (Dalvik 解释执行)

Dalvik作为虚拟机,负责加载dex/odex文件并解析成机器码交给系统运行。此时Dalvik纯解释执行。

Android 2.2 (Dalvik JIT)

Dalvik使用JIT进行即时编译,借助Hospot,JIT编译器对执行频繁的dex/odex代码进行编译和优化,编译成Native Code。

缺点:每次启动都需要重新编译,运行时比较耗电,造成电池额外开销。

Android 4.4 (ART AOT / Dalvik)

引入ART(Android Runtime)和AOT(Ahead-Of-Time),此时ART和Dalvik共存,用户可以在两者进行选择。

Android 5.0 (ART AOT)

ART(Android Runtime)全面取代Dalvik,AOT成为唯一的编译模式。

JIT是在运行时进行编译(动态编译),每次运行程序时都要对odex进行重新编译。而AOT是静态编译,应用安装时dex2oat过程会把dex预编译为ELF文件,相当于本地应用。

缺点:

应用安装和系统升级之后需要重新编译,比较耗时。

优化后的文件会占用额外的存储空间。

Android 7.0 (ART AOT/JIT)

Android 7.0采用AOT与JIT混合编译的模式。

1、应用安装时dex不会被编译。

2、运行时先通过解析器解释执行,热点函数被识别后被JIT编译后存储在JIT Code Cache中生成profile文件来记录热点函数信息。

3、手机进入空闲(IDLE)或充电(Charging)状态时,系统扫描App目录下的profile文件执行AOT过程进行编译。

Dalvik和ART的区别

发布了28 篇原创文章 · 获赞 9 · 访问量 5574

猜你喜欢

转载自blog.csdn.net/rookiegan/article/details/104896834
今日推荐