一、类加载与字节码技术
1. 类文件结构
2. 字节码指令
3. 编译期处理
4. 类加载阶段
5. 类加载器
6. 运行期优化
1.类文件结构
类文件结构
1.1 魔数magic
介绍
每个java class文件的前4个字节是魔数:0x CAFEBABE。魔数作用在于分辨出java class文件和非java class文件。
1.2 版本minor_version,major_version
介绍
4~7字节,表示类的版本00 34(16进制换算十进制是52),表示java8
51 java7
52 java8
53 java9
1.3 常量池
介绍
存放字面量(文本字符串,final常量)和符号引用(包名,类名)
①8~9字节,常量池计数器2个字节代表常量池的长度。00 23(十进制35)表示有1~34项。
②后面n个字节(1-常量池-1)就是常量池表,存放的是字面量(字符串,final常量值)和符号引用(类,方法,字段描述符)。
1.4访问标识和继承信息
1.access_flags :常量池结束后的2个字符就是访问标志
判断这个class是类还是接口...
经过查表知道00 21 是由0x0020+0x0001组合而成,所以是公共类
2.this_class :占2字节,当前类的名字是什么
00 03 表示常量池的#3项,需要从常量池读取
3.super_class :占2字节,父类的名字是什么。
00 04 表示常量池的#4项,需要从常量池读取
4. 接口集合
①interfaces_count:占2字节,实现接口的数量
00 00 没实现接口
②interfaces[interfaces_count]:占2字节,接口有哪些
1.5字段表集合
fields
字段表表示声明的变量,字段的名字,字段的类型是什么。通过引用常量池的常量描述
1.fields_count (字段计数器)
2个字节,表示成员变量的数量
2.fields[ ] 字段表
字段表结构
字段表含义
00 02:访问标志,查上表,私有的
00 05:字段名,查常量池 #5
00 06:字段数据类型,查常量池 #6
00 00: 属性计数器
00 02: 属性集合
1.6方法表集合
methods:
①指向常量池索引的集合。每一个method_info对应着一个类或接口的信息。
②方法的访问修饰符,方法的返回值,方法参数信息
1. methods_count 方法计数器
2个字节,方法的个数
00 02 :有2个方法
2. methods[ ] 方法表
存放方法信息的
详细的列表
1.7附加属性表集合
介绍
class文件的源文件名称...