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

【Android】谈谈DexClassLoader

一,Dex和Jar

DEX 文件(Dalvik Executable)相较于普通的 JAR(Java 字节码 .class 文件)进行了多方面的优化,主要是为了适应 Android 设备的性能和资源限制(例如内存、存储空间和处理能力)。以下是 DEX 文件的一些具体优化点:


1. 内存占用优化

  • 合并类文件

    • DEX 文件将多个 .class 文件,即代码中多个java文件,合并到一个文件中,而不是像 JAR 文件那样每个java文件编译后生成多个独立的 .class 文件。这减少了文件头和元数据的冗余,节省了空间。

  • 共享常量池

    • DEX 文件的常量池(constant pool)是全局共享的,而 JAR 文件中每个 .class 文件都有一个独立的常量池。在.class文件合并中,会提取常量,全局使用。

    • 这种全局共享的机制可以消除重复的常量(如字符串、方法引用等),从而显著减少内存占用。


2. 指令集优化

  • 基于寄存器的指令集

    • DEX 使用的是基于寄存器的指令集,而 Java 字节码使用的是基于栈的指令集。

    • 基于寄存器的指令集可以减少对栈的操作,指令数量更少,执行效率更高。

    • 例如,在 Dalvik 虚拟机中,一个寄存器操作通常只需一条指令,而在 JVM 的栈模型中可能需要多条指令来完成同样的操作。

  • 紧凑的指令编码

    • DEX 文件的指令编码更加紧凑,指令长度通常为 16 位或 32 位,节省了可执行代码的体积。


3. 方法和字段的去重

  • 方法引用去重

    • DEX 文件将相同的函数签名(方法名、参数类型等)合并到一个引用表中,而不是在每个类中都重复存储。

  • 字段引用去重

    • 类似于方法引用,字段(变量)也会被集中管理,避免重复存储。


4. 字符串优化

http://www.xdnf.cn/news/2848.html

相关文章:

  • dx11 龙书学习 第四章 dx11 准备工作
  • Unity AI-使用Ollama本地大语言模型运行框架运行本地Deepseek等模型实现聊天对话(二)
  • 天梯——链表去重
  • 基于STM32、HAL库的ATSHA204A安全验证及加密芯片驱动程序设计
  • 深度学习大模型: AI 阅卷替代人工阅卷
  • Field访问对象int字段,对象访问int字段,通过openjdk17 C++源码看对象字段访问原理
  • J-Link RTT打印输出调试信息
  • 深入蜂窝物联网:第二章 深度解读 NB-IoT:协议栈、部署与典型应用
  • 两地三中心
  • MySQL数据库(14)—— 使用C操作MySQL
  • 【ACL系列论文写作指北03-相关工作怎么写】-展示视野与定位创新
  • leetcode283-移动零
  • 第二章 信息技术发展(2.2 新一代信息技术及应用)
  • Linux428 chmod 0xxx 1xxx 2xxx 4xxx;umask;chown 属主属组 软件包rpm
  • ECharts散点图-散点图20,附视频讲解与代码下载
  • php数据库连接
  • Docker安装的mysql限制ip访问
  • [三分钟]web自动化测试(三):selenium自动化测试常用函数(下)
  • 基于蓝牙Beacon人员导航方案
  • 【Linux】第十二章 安装和更新软件包
  • 第七章:Server/Client Communication
  • 增量抽取的场景下,周期快照表最新分区的数据是如何生成?
  • 安卓开发学习随记
  • OpenCV 图形API(69)图像与通道拼接函数------将一个 GMat 类型的对象转换为另一个具有不同深度GMat对象函数convertTo()
  • vue3使其另一台服务器上的x.html,实现x.html调用中的函数,并向其传递数据。
  • kylin v10 + argo + ascend 310p多机多卡 pytorch distributed 训练
  • JavaWeb学习打卡-Day4-会话技术、JWT、Filter、Interceptor
  • WPF之Label控件详解
  • GoLand包的爆红问题解决
  • Coupang火箭计划深度攻略:eBay卖家突破韩国市场的三维数据作战模型