欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 文旅 > 明星 > Android JIT( ART即时编译器),Just In Time Compiler,即时编译技术

Android JIT( ART即时编译器),Just In Time Compiler,即时编译技术

2025/4/27 12:16:20 来源:https://blog.csdn.net/zhangphil/article/details/147520790  浏览:    关键词:Android JIT( ART即时编译器),Just In Time Compiler,即时编译技术

Android JIT( ART即时编译器),Just In Time Compiler,即时编译技术

Android Runtime (ART) 包含一个具备代码分析功能的即时 (JIT) 编译器,该编译器可以在 Android 应用运行时持续提高其性能。JIT是Just In Time Compiler,即时编译技术。

 JIT: https://source.android.com/docs/core/runtime/jit-compiler?hl=zh-cn

ART 功能
以下是 ART 实现的一些主要功能。

预先 (AOT) 编译
ART 引入了预先编译机制,可提高应用的性能。ART 还具有比 Dalvik 更严格的安装时验证。

在安装时,ART 使用设备自带的 dex2oat 工具来编译应用。此实用工具接受 DEX 文件作为输入,并为目标设备生成经过编译的应用可执行文件。该工具应能够顺利编译所有有效的 DEX 文件。但是,一些后处理工具会生成无效文件,Dalvik 可以接受这些文件,但 ART 无法编译这些文件。

JIT 编译器对 Android 运行组件当前的预先 (AOT) 编译器进行了补充,可以提升运行时性能,节省存储空间,加快应用和系统更新速度。

为了提升效率Android中添加了JIT编译器,当App运行时,每当遇到一个新类,JIT编译器就会对这个类进行即时编译,经过编译后的代码,会被优化成相当精简的原生型指令码(即native code),这样在下次执行到相同逻辑的时候,速度就会更快。
JIT 编译器可以对执行次数频繁的 dex/odex 代码进行编译与优化,将 dex/odex 中的 Dalvik Code(Smali 指令集)翻译成相当精简的 Native Code 去执行,JIT 的引入使得 Dalvik 的性能提升了 3~6 倍。

JIT缺陷
每次启动应用都需要重新编译(没有缓存)。
运行时比较耗电,耗电量大。

JIT和AOT
AOT是指"Ahead Of Time",与"Just In Time"不同,提前编译。JIT,AOT是Android虚拟机采用的两种不同的编译策略。

AOT作用
JIT是运行时编译,是动态编译,可以对执行次数频繁的dex代码进行编译和优化,减少以后使用时的翻译时间,虽然可以加快Dalvik运行速度,但是有一个很大的问题:将dex翻译为本地机器码也要占用时间。 所以Google在4.4推出了全新的虚拟机运行环境ART(Android RunTime),用来替换Dalvik(4.4上ART和Dalvik共存,用户可以手动选择,5.0 后Dalvik被替换)。

AOT 是静态编译,应用在安装的时候会启动 dex2oat 过程把 dex预编译成 ELF 文件,每次运行程序的时候不用重新编译。
AOT缺陷
应用安装和系统升级之后的应用优化比较耗时(重新编译,把程序代码转换成机器语言)。
优化后的文件会占用额外的存储空间(缓存转换结果)。


JIT和AOT共存
Android 7.0上,JIT 编译器被再次使用,采用AOT/JIT 混合编译的策略,特点是:

1、应用在安装的时候dex不会再被编译。
2、App运行时,dex文件先通过解析器被直接执行,热点函数会被识别并被JIT编译后存储在 jit code cache 中并生成profile文件以记录热点函数的信息。
3、手机进入 IDLE(空闲) 或者 Charging(充电) 状态的时候,系统会扫描 App 目录下的 profile 文件并执行 AOT 过程进行编译。

打开 JIT 日志记录

adb root
adb shell stop
adb shell setprop dalvik.vm.extra-opts -verbose:jit
adb shell start

停用 JIT

adb root
adb shell stop
adb shell setprop dalvik.vm.usejit false
adb shell start


 

ART:https://source.android.com/docs/core/runtime?hl=zh-cn

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词