【学习笔记】class文件与dex文件
为什么dex文件比class文件更适合移动端?
首先说明移动端的局限性
- 文件结构
- 内存有限
- 安装包体积不宜太大
- 频繁I/O操作会带来卡顿
Class文件
将.class文件直接打开会看到其物理结构。一个字节占用一个单元,存放一些字节码指令。
字节码文件的逻辑结构
- 文件头。存储文件基础信息
- 魔数。告诉虚拟机,这是一个可接受的Class文件,固定值为0xCAFEBABE
- 主版本号
- 次版本号
- 常量池。资源仓库,占用内存较大
- 常量池计数。计数从1开始,所以常量的数量是计数-1
- 类信息。
- 访问修饰限定符
- this class
- super class
- 接口计数
- 接口
- 字段表。成员变量、类变量等
- 字段表计数
- 字段
- 方法表。
- 属性信息。
dex文件
由多个.class文件通过Dx -dex工具转换成一个.dex文件
dex文件的逻辑结构
- 文件头
- string_ids
- type_ids
- proto_ids
- fieid_ids
- method_ids
- 类定义
- 数据
xx_ids为索引区,类定义与数据为数据区
class文件对比dex文件
.class:
- 每个类都有独立的常量池,导致代码冗余
- 每个类属于一个文件
- 基于栈的字节码
.dex:
- 常量记录在数据区,所有类都通过索引获取常量的值,相同的常量可以合并,大大降低了代码冗余
- 所有类在同一文件中,即使是multidex,文件总数也远小于class文件
- 基于虚拟寄存器的字节码
【学习笔记】class文件与dex文件相关推荐
- C# 学习笔记(12)hex文件转bin文件小工具
C# 学习笔记(12)hex文件转bin文件小工具 hex文件格式 hex文件格式网上有很多 我这里参考HEX文件格式详解https://blog.csdn.net/weixin_39752827/a ...
- Liunx学习笔记 - 07 - 02 正则表达式与文件格式化处理
Liunx学习笔记 - 07 - 02 正则表达式与文件格式化处理 1 前言:啥是正则表达式 简单来讲,正则表达式是处理字符串的方法,它是以行为单位来进行字符串的处理行为,正则表达式通过一些特殊符号的 ...
- Linux学习笔记(七):文件压缩、打包与备份
Linux学习笔记(七):文件压缩.打包与备份 常见的压缩指令 gzip, zcat/zmore/zless/zgrep bzip2, bzcat/bzmore/bzless/bzgrep xz, x ...
- oracle rac 环境配置文件,学习笔记:Oracle RAC spfile参数文件配置案例详解
天萃荷净 rac中的spfile探讨,记录一下Oracle RAC搭建完成后关于spfile参数文件的配置案例,与更改RAC环境中参数文件的方法 今天朋友的的rac,因为被同事做数据库升级,分别在两个 ...
- 20190328学习笔记 - JSP 中的 tag 文件
20190328学习笔记 - JSP 中的 tag 文件 对于tag 文件 1. 引入 tag 文件 2. 在/WEB-INF/tags/sys 下,新增一个gridselect.tag文件 3. 在 ...
- 【Java 虚拟机原理】Dalvik 虚拟机 ( 打包 Jar 文件和 Dex 文件 | 反编译 Dex 文件 | 分析 Dex 文件反编译结果 )
文章目录 前言 一.打包 Jar 文件和 Dex 文件 1.示例代码 2.打包 Jar 文件 3.打包 Dex 文件 二.反编译 Dex 文件 三.分析 Dex 文件 1.Student 类相关信息 ...
- java class dex_class文件与dex文件分析
1.什么是class文件 class文件就是可以被JVM识别,加载,运行的一种文件格式.一般情况下,它可以由java代码编译执行后得到,但是这并不是一定的,像kotlin,scala,python,r ...
- Android学习笔记----解决“com.android.dex.DexIndexOverflowException: method ID not in [0, 0xffff]: 65536”问题
Android学习笔记----解决"com.android.dex.DexIndexOverflowException: method ID not in [0, 0xffff]: 6553 ...
- java学习笔记16--I/O流和文件
本文地址:http://www.cnblogs.com/archimedes/p/java-study-note16.html,转载请注明源地址. IO(Input Output)流 IO流用来处理 ...
最新文章
- mysql链接数据库properties_mysql 之通过配置文件链接数据库
- Android5.0如何正确启用isLoggable(二) 理分析
- 全国大学生智能车智能汽车竞赛车模检查规范
- 截屏没有了_华为手机居然有6种截屏花招,很多人不知道,你会用哪几种?
- AI算法连载09:统计之决策树
- qq数据泄露_有哪些良好的上网习惯,可以避免隐私泄露?
- Altium AD20导入DXF/DWG文件,导入AutoCAD绘制的树莓派4B板框及图形
- 在你学习计算机的路上,哪些书籍对你的帮助最大?
- Photoshop CS5无法卸载或卸载不干净怎么办?
- ios App加载网页,点击网页链接调用App处理
- 2021年中国高空作业平台行业发展现状及竞争格局分析,国产品牌异军突起「图」
- 文件及文件的操作-读、写、追加的t和b模式
- R语言中Axis()函数的参数详解
- java 获取 word 窗体域_办公小技巧:巧用窗体域 控制Word文档修改区
- 便携式储能系统---“钱景”无限
- wmf文件与emf文件
- MATLAB 面向对象编程(十二)抽象类
- Make和Makefile
- dbd:oracle下载,perl DBD::oracle
- PERT图的事件、活动、松弛时间、关键路径的理解和计算
热门文章
- 【ROS-cartographer学习小记-01】使用自己的激光雷达思岚A1运行cartographer,附代码以及bag包-直接运行即可看到结果
- 全息投影餐厅给餐饮市场带来哪些好处
- 华为交换机主备命令_网络设备之基础配置命令(华为交换机二三层)
- Echart的效果图表(组件都是引入echart的块)
- CPU多核一定比单核性能强吗
- php核心知识点(总结)
- conda channel 中科大
- matlab功率谱的峰值,基于Matlab功率谱密度估计方法.doc
- DDD之战略战术设计
- 点击android搜索框跳入另一个页面,android - ToolBar中的SearchView如何让点击之后跳转到一个新的Activity...