为什么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. 基于虚拟寄存器的字节码

【学习笔记】class文件与dex文件相关推荐

  1. C# 学习笔记(12)hex文件转bin文件小工具

    C# 学习笔记(12)hex文件转bin文件小工具 hex文件格式 hex文件格式网上有很多 我这里参考HEX文件格式详解https://blog.csdn.net/weixin_39752827/a ...

  2. Liunx学习笔记 - 07 - 02 正则表达式与文件格式化处理

    Liunx学习笔记 - 07 - 02 正则表达式与文件格式化处理 1 前言:啥是正则表达式 简单来讲,正则表达式是处理字符串的方法,它是以行为单位来进行字符串的处理行为,正则表达式通过一些特殊符号的 ...

  3. Linux学习笔记(七):文件压缩、打包与备份

    Linux学习笔记(七):文件压缩.打包与备份 常见的压缩指令 gzip, zcat/zmore/zless/zgrep bzip2, bzcat/bzmore/bzless/bzgrep xz, x ...

  4. oracle rac 环境配置文件,学习笔记:Oracle RAC spfile参数文件配置案例详解

    天萃荷净 rac中的spfile探讨,记录一下Oracle RAC搭建完成后关于spfile参数文件的配置案例,与更改RAC环境中参数文件的方法 今天朋友的的rac,因为被同事做数据库升级,分别在两个 ...

  5. 20190328学习笔记 - JSP 中的 tag 文件

    20190328学习笔记 - JSP 中的 tag 文件 对于tag 文件 1. 引入 tag 文件 2. 在/WEB-INF/tags/sys 下,新增一个gridselect.tag文件 3. 在 ...

  6. 【Java 虚拟机原理】Dalvik 虚拟机 ( 打包 Jar 文件和 Dex 文件 | 反编译 Dex 文件 | 分析 Dex 文件反编译结果 )

    文章目录 前言 一.打包 Jar 文件和 Dex 文件 1.示例代码 2.打包 Jar 文件 3.打包 Dex 文件 二.反编译 Dex 文件 三.分析 Dex 文件 1.Student 类相关信息 ...

  7. java class dex_class文件与dex文件分析

    1.什么是class文件 class文件就是可以被JVM识别,加载,运行的一种文件格式.一般情况下,它可以由java代码编译执行后得到,但是这并不是一定的,像kotlin,scala,python,r ...

  8. Android学习笔记----解决“com.android.dex.DexIndexOverflowException: method ID not in [0, 0xffff]: 65536”问题

    Android学习笔记----解决"com.android.dex.DexIndexOverflowException: method ID not in [0, 0xffff]: 6553 ...

  9. java学习笔记16--I/O流和文件

    本文地址:http://www.cnblogs.com/archimedes/p/java-study-note16.html,转载请注明源地址. IO(Input  Output)流 IO流用来处理 ...

最新文章

  1. mysql链接数据库properties_mysql 之通过配置文件链接数据库
  2. Android5.0如何正确启用isLoggable(二) 理分析
  3. 全国大学生智能车智能汽车竞赛车模检查规范
  4. 截屏没有了_华为手机居然有6种截屏花招,很多人不知道,你会用哪几种?
  5. AI算法连载09:统计之决策树
  6. qq数据泄露_有哪些良好的上网习惯,可以避免隐私泄露?
  7. Altium AD20导入DXF/DWG文件,导入AutoCAD绘制的树莓派4B板框及图形
  8. 在你学习计算机的路上,哪些书籍对你的帮助最大?
  9. Photoshop CS5无法卸载或卸载不干净怎么办?
  10. ios App加载网页,点击网页链接调用App处理
  11. 2021年中国高空作业平台行业发展现状及竞争格局分析,国产品牌异军突起「图」
  12. 文件及文件的操作-读、写、追加的t和b模式
  13. R语言中Axis()函数的参数详解
  14. java 获取 word 窗体域_办公小技巧:巧用窗体域 控制Word文档修改区
  15. 便携式储能系统---“钱景”无限
  16. wmf文件与emf文件
  17. MATLAB 面向对象编程(十二)抽象类
  18. Make和Makefile
  19. dbd:oracle下载,perl DBD::oracle
  20. PERT图的事件、活动、松弛时间、关键路径的理解和计算

热门文章

  1. 【ROS-cartographer学习小记-01】使用自己的激光雷达思岚A1运行cartographer,附代码以及bag包-直接运行即可看到结果
  2. 全息投影餐厅给餐饮市场带来哪些好处
  3. 华为交换机主备命令_网络设备之基础配置命令(华为交换机二三层)
  4. Echart的效果图表(组件都是引入echart的块)
  5. CPU多核一定比单核性能强吗
  6. php核心知识点(总结)
  7. conda channel 中科大
  8. matlab功率谱的峰值,基于Matlab功率谱密度估计方法.doc
  9. DDD之战略战术设计
  10. 点击android搜索框跳入另一个页面,android - ToolBar中的SearchView如何让点击之后跳转到一个新的Activity...