Class文件和Dex文件
Class文件的基本概念:
能够被jvm识别,加载并执行的文件格式。
class文件的作用:
记录一个类文件的所有信息,记住是所有信息
class文件的结构:
是一种8位字节的二进制流文件
各个数据按顺序紧密的排列,无间隙
每个类或接口都独占一个class文件
在这张图中,每一行表示两个字节长度,按照从上到下、从左到右的顺序描述了class文件的结构。其中,浅颜色的部分是无符号数,深颜色的部分是表。下面以表格的形式详细描述一下具体的信息:
类型 |
名称 |
数量 |
U4 |
magic(加密段) |
1 |
U2 |
minor_version(最新JDK版本) |
1 |
U2 |
major_version(当前版本) |
1 |
U2 |
constant_pool_count(常量池数量) |
1 |
cp_info |
constant_pool |
constant_pool_count-1 |
U2 |
access_flags(权限) |
1 |
U2 |
this_class |
1 |
U2 |
super_class |
1 |
U2 |
interfaces_count |
1 |
U2 |
interfaces(直接继承接口) |
interfaces_count |
U2 |
fields_count |
1 |
field_info |
fields(所以成员变量) |
fields_count |
U2 |
methods_count |
1 |
method_info |
methods() |
methods_count |
U2 |
attributes_count |
1 |
attribute_info |
attributes(类属性) |
attributes_count |
常量池
记录基本数据类型
记录的是索引,最后还是知道基本数据类型
class文件的弊端:
内存占用大,不适合移动端
堆栈的加栈模式,加载速度慢
文件IO操作多,类查找慢
dex文件:
生成:
执行:
dex文件的作用:
记录整个工程中所有类文件的信息,记住是整个工程
文件结构:
是一种8为字节的二进制流文件
各个数据按顺序紧密的排列,无间隙
整个应用中所有的Java源文件都放在一个dex文件中
class文件和dex文件的区别:
本质上他们是一样的,dex文件是从class文件演变而来的
class文件存在许多冗余信息,dex会去除冗余,并整合