class & dex 文件详解
一、class 文件
1. 什么是 class 文件
能够被 JVM 识别,加载并执行的文件格式
2. 如何生成一个class 文件
- 通过 IDE自动帮我们 build 生成 class 文件
- 手动通过javac 命令来生成 class 文件
- 通过 java 命令去执行 class 文件
3. class 文件的作用
记录一个类文件的所有信息
4. class 文件格式详解
4.1 class 文件结构
1.一种8位字节的二进制流文件
2.各个数据按顺序紧密的排列,无间隙
3.每个类或接口都单独占据一个class 文件
4.2 constant_pool(常量池)
- CONSTANT_Integer_info
- CONSTANT_Long_info
- CONSTANT_String_info
- CONSTANT_Class_info
- CONSTANT_Fieldref_info
- CONSTANT_Methodref_info
4.3 010 Editor 查看class文件结构
5. class文件弊端
- 内存占用大,不适合移动端
- 堆栈的加栈模式,加载速度慢
- 文件 IO 操作多,类查找慢
二、dex 文件详解
1. 什么是 dex文件
能够被 DVM 识别,加载并执行的文件格式
2. 如何生成一个 dex 文件
- 通过 IDE 自动帮我们 build 生成 class 文件
- 手动通过 dx 命令来生成 class 文件
dx --dex --output Hello.dex Hello.class
- 手动运行 dex 文件在手机上
//首先我们把 Hello.dex 文件push 到模拟器上
adb push Hello.dex /sdcard
adb shell
//切换到sdcard 目录下执行以下命令
dalvikvm -cp Hello.dex Hello
//执行结果
Hello,Android!
3. dex 文件的作用
记录整个工程中所有类文件中的信息
4. dex 文件格式详解
4.1 dex文件结构
1.一种8位字节的二进制流文件
2.各个数据按顺序紧密的排列,无间隙
3.整个应用中所有Java源文件都放在一个 dex 中
4.2 010 Editor 查看dex文件结构
三、class文件与 dex 文件对比
异同
- 本质上都是一样的,dex是从 class文件演变而来
- class 文件存在很多冗余信息,dex 会去除冗余,并整合