class文件
能够被jvm识别,加载并执行的文件格式
class文件生成
- 通过IDE自动build
- javac手动生成
通过java命令执行
class文件作用
记录一个类文件的所有信息
class文件结构
- 一种8位字节的二进制流文件
- 各个数据按顺序紧密排列,无间隙
- 每个类或接口都单独占据一个class文件
字段 | 名称 | 数据类型 | 数量 | 描述 |
---|---|---|---|---|
magic | 魔数 | u4 | 1 | class文件的标志,判断一个文件是不是class格式文件的标准 |
minor_version | 副版本号 | u2 | 1 | |
major_version | 主版本号 | u2 | 1 | |
constant_pool_count | 常量池大小 | u2 | 1 | |
constant_pool | 常量池 | cp_info | count_pool_count-1 | |
access_flag | 访问标志 | u2 | 1 | |
this_class | 当前类索引 | u2 | 1 | |
super_class | 父类索引 | u2 | 1 | |
interfaces_count | 接口索引集合大小 | u2 | 1 | |
interfaces | 接口索引集合 | u2 | interfaces_count | |
fields_count | 字段索引集合大小 | u2 | 1 | |
fields | 字段索引集合 | field_info | field_count | |
methods_count | 方法索引集合大小 | u2 | 1 | |
methods | 方法索引集合 | method_info | method_count | |
attributes_count | 属性索引集合大小 | u2 | 1 | |
attributes | 属性索引集合 | attribute_info | attribute_count |
详情:https://kaiwu.lagou.com/course/courseInfo.htm?courseId=67#/detail/pc?id=1857
class文件弊端
- 内存占用大,不适合移动端
- 堆栈的加栈模式,加载速度慢
- 文件IO操作多,类查找慢
dex文件
能够被DVM识别,加载并执行的文件格式
生成方式
- 通过IDE自动build
- dx命令手动生成
// 生成dex
dx --dex --output Hello.dex Hello.class
// adb push到手机
adb push Hello.dex /storage/emulated/0
// run起来
dalvikvm -cp /sdcard/Hello.dex Hello
作用
记录整个工程中所有类文件的信息
文件结构
- 一种8位字节的二进制流文件
- 各个数据按顺序紧密排列,无间隙
- 整个应用中所有java源文件都放在一个dex中
两者异同
- 本质上class文件和dex文件一样,dex是从class文件演变而来的
- class文件存在许多冗余信息,dex会除去冗余并整合
- dex优点:通过一个dex文件存贮了所有java源代码,极大的减小了dex体积,更适合移动端
网友评论