《深入理解Java虚拟机》阅读笔记 第六章 类文件结构

点击查看《深入理解Java虚拟机》阅读梳理合集

常量池

常量池中主要存放两大类常量:字面量和符号引用。
字面量比较接近于java语言层面的常量概念,如文本字符串、被声明为final的常量值等。而符号引用则属于编译原理方面的概念,主要包括下面几类常量
1.被模块到处或者开放的包
2.类和接口的全限定名
3.字段的名称和描述符
4.方法的名称和描述符
5.方法句柄和棒法类型
6.动态调用点和动态常量
java代码在编译的时候没有连接过程,而是在虚拟机加载class文件的时候进行动态连接,也就是说class文件中不会保存各个方法,字段在内存中的布局信息。他们的符号引用经过虚拟机在运行期转换之后才能得到真正的内存入口地址。当虚拟机加载类时,将会从常量池中获得对应的符号引用,再在类创建时或运行时解析,翻译到具体的内存地址之中

访问标志

在常量池结束之后,紧接着的两个字节代表访问标志,这个标志用于识别一些类或者接口层次的访问信息,包括:这个Class是类还是接口;是否为public,是否为abstract 如果是类的话,是否被声明为final等等。

类索引、父类索引、接口索引集合

在访问标志之后,是类索引、父类索引、接口索引集合。类索引和夫类索引都是一个u2类型的数据。和接口索引集合是一组u2类型的数据的集合。Class文件由这三项数据来确定该类型的继承关系。类索引用于确定这个类的全限定类名,父类索引确定父类的全限定类名。接口索引集合用来描述这个类实现了哪些接口。

字段表集合

字段表中记录着每个字段的修饰符(public abstract transient等) 名称(username)和描述符(基本数据类型 数组)的索引(指向常量池)以及一个属性表。属性表中用来记录一些额外信息。例如生命一个final int a = 123.那么就会存在一个指向字面量123的索引,

方法表集合

放发表和字段表集合内容一样也是由修饰符(sychnorize native public等),名称(toString)和描述符(参数列表+返回值类型)的索引以及一个属性表组成,方法的代码存放在属性表中的一个名为code的属性中。

属性表集合

猜你喜欢

转载自blog.csdn.net/qq_30033509/article/details/114991533