JVM(八)-- Class文件 - 指南

目录

一、前端编译器

二、Class文件结构

1. 常量池计数器

2. 常量池

3. 访问标识

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

5. 字段表集合

6.方式表集合

7.总结


一、前端编译器

前端编译器的主要任务就是负责将符合Java语法规范的Java代码转换为符合JVM规范的字节码文件。

二、Class文件结构

任何一个Class文件都对应着唯一一个类或者接口的定义信息,Class文件实际上不一定以磁盘文件的形式存在(也可以通过网络进行传输)。Class文件是一组以8个字节为基础单位的二进制流

多少,先后顺序如何,都不允许改变。就是Class的结构不像XML等语言,由于没有任何分隔符号,所以其中的数据项都是被严格限定的,哪个字节代表什么含义,长度

Class文件的总体结构如下:魔数、Class文档版本、常量池、访问标志、索引集合、字段表集合、途径表集合、属性表集合。

在·

1. 常量池计数器

2. 常量池

占用Class文件空间最大的数据任务之一。就是常量池许可理解为Class档案中的资源仓库,也

常量池中为什么要包含这些内容?

Java代码在进行编译的时候,并不像C和C++有“连接”这一步骤,而是在虚拟机加载Class文件进行动态链接。在Class材料中不会保存方法、字段的最终内存信息,因此这些方法和字段只能保存为符号引用,在虚拟机运行时再转换为真实的内存信息。

3. 访问标识

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

类索引是指向常量池的索引,献出了当前类的全限定名;父类索引也是指向常量池的索引,提供了父类的全限定名。

5. 字段表集合

字段表集合中包括字段计数器字段表

6.办法表集合

办法表集合与字段表集合在设计上是差不多的。包含方法计数器方法表

7.总结

通过对于Class材料的分析能够用下面的几张图来进行总结。

下面这张图展示了魔数(cafe babe),这是Class档案的表示;以及主版本和副版本,两者结合表示当前Class文件的版本号。常量池计数器存储了该常量池中的常量个数;后面每一个常量的开头都有一个标识Tag,表明了该常量是个什么类型。

下面这张图囊括了该类的访问标识等信息。当前类索引父类索引都是指向常量池的索引,常量池中包含了当前类和父类的相关信息,根据索引才行查询到相关信息。黄色背景指的是达成接口的计数器,由于当前类并没有实现接口,故而计数器中数值为0.

下面这张图给出了该类中字段和方法的信息。字段计数器表示该类中有多少个字段(即类中的成员变量);字段访问标识表示该字段的修饰符属性(即public、final等),图中字段访问标识为2,则查表即可得到相关信息;字段名索引字段描述符索引都要去常量池中进行查找;字段的属性计数器表示当前字段有多少个属性。方法的描述信息与字段类似。只不过图中有两个途径。

对于字段和方法的属性,行容易地理解为它们的特征信息,即它们在类中所具有的修饰符、类型、名称、作用范围、行为特征等。

posted on 2025-11-06 10:57  wgwyanfs  阅读(7)  评论(0)    收藏  举报

导航