【学习笔记】class文件与dex文件

5 篇文章 0 订阅
5 篇文章 0 订阅

为什么dex文件比class文件更适合移动端?

首先说明移动端的局限性

  1. 文件结构
  2. 内存有限
  3. 安装包体积不宜太大
  4. 频繁I/O操作会带来卡顿

Class文件

将.class文件直接打开会看到其物理结构。一个字节占用一个单元,存放一些字节码指令。

字节码文件的逻辑结构

  1. 文件头。存储文件基础信息
    1. 魔数。告诉虚拟机,这是一个可接受的Class文件,固定值为0xCAFEBABE
    2. 主版本号
    3. 次版本号
  2. 常量池。资源仓库,占用内存较大
    1. 常量池计数。计数从1开始,所以常量的数量是计数-1
  3. 类信息。
    1. 访问修饰限定符
    2. this class
    3. super class
    4. 接口计数
    5. 接口
  4. 字段表。成员变量、类变量等
    1. 字段表计数
    2. 字段
  5. 方法表。
  6. 属性信息。

dex文件

由多个.class文件通过Dx -dex工具转换成一个.dex文件

dex文件的逻辑结构

  1. 文件头

  1. string_ids
  2. type_ids
  3. proto_ids
  4. fieid_ids
  5. method_ids
  6. 类定义
  7. 数据

xx_ids为索引区,类定义与数据为数据区

class文件对比dex文件

.class:

  1. 每个类都有独立的常量池,导致代码冗余
  2. 每个类属于一个文件
  3. 基于栈的字节码

.dex:

  1. 常量记录在数据区,所有类都通过索引获取常量的值,相同的常量可以合并,大大降低了代码冗余
  2. 所有类在同一文件中,即使是multidex,文件总数也远小于class文件
  3. 基于虚拟寄存器的字节码
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值