当前位置: 首页 > news >正文

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

相关文章:

  • 【大模型】Coze AI 智能体工作流从配置到使用实战详解
  • Simulink 数据存储机制:Base Workspace、Model Workspace 与 Data Dictionary 的核心区别
  • Python + Playwright:如何在Docker 容器运行测试?
  • docker容器运维工具——ctop
  • 基于Spring AI Alibaba + Spring Boot + Ollama搭建本地AI对话机器人API
  • node入门和npm
  • 当自动驾驶遇上“安全驾校”:NVIDIA如何用技术给无人驾驶赋能?
  • java智慧城管综合管理系统源码,前端框架:vue+element;后端框架:springboot;移动端:uniapp开发,技术前沿,可扩展性强
  • 图像处理——边缘检测
  • RASP技术在DevOps中的安全应用
  • 冯·诺依曼和哈佛架构​​​​两种架构的总线组成及核心特点
  • Flink反压问题解析
  • 1--Python基础课程实验指导书
  • linux blueZ 第四篇:BLE GATT 编程与自动化——Python 与 C/C++ 实战
  • CSS3布局方式介绍
  • 性能提升手段--池化技术
  • PySpark实现ABC_manage_channel逻辑
  • 精益数据分析(25/126):关键指标驱动业务发展
  • WPF实现数字孪生示例
  • 使用PyTorch实现简单图像识别(基于MNIST手写数字数据集)的完整代码示例,包含数据加载、模型定义、训练和预测全流程
  • 葛兰西的三位一体:重提并复兴欧洲共产主义的平民圣人
  • 乌方称泽连斯基与特朗普进行简短会谈
  • 来论|这无非就是一只“纸老虎”:评特朗普政府“关税战”
  • 龚正会见巴基斯坦卡拉奇市市长穆尔塔扎·瓦哈卜、巴西圣保罗市市长里卡多·努内斯
  • 今年地质灾害防治形势严峻,哪些风险区被自然资源部点名?
  • 女子隐私被“上墙”莫名遭网暴,网警揪出始作俑者