字节码文件

来源:互联网 发布:有声英文书知乎 编辑:程序博客网 时间:2024/05/19 16:47

1.字节码文件的内部组成结构

每一个项(类结构格式的内容)包括类型、名称以及该项的数量。类型可以是表名,同时也是“基本类型”。在这个结构体中只有两种数据结构,分别是无符号和表,其中无符号数属于字节码文件中的“基本类型”,如下:字节码文件中的“基本类型”


1)        magic(魔术):一个有效的字节码文件的前4个字节为0Xcafebabe,也被称之为魔术(magicnumber).魔术就是JVM用于校验所读取的目标文件是否是一个有效且合法的字节码文件。

2)        minor_version(次版本号)和major_version(主版本号):在magic后的4个字节就是编译的次版本号和主版本号,它们共同构成了字节码文件的版本号。

3)        constant_pool_cout(常量池计数器)和constant_pool(常量池[OW1] ):

a)        常量池是字节码文件中非常重要的数据项,同时也是字节码文件中与其他项关联最多和占用字节码空间最大的数据项。常量池中主要用于存放字面量(Literal)和符号引用(Symbolic References)两大类数据常量,其访问方式是通过索引来进行访问的,但由于常量池列表中的常量数并不固定,因此在常量池之前就需要通过一个2个字节的常量池计数器来统计常量池列表中到底拥有多少常量项。

b)        常量池存放的字面量由文字字符串、final常量值等构成,而符号引用则包括了类和接口的全限定名(Fully Qualified Name)、字段的名称和描述符(Descript),以及方法的名称和描述符。

c)        从常量池中获取出对应的符号引用,并经过解析阶段将这些符号引用全部转换为直接引用后,Java虚拟机才能正常使用。

d)        常量池中的类型


常量池的计数器中的计数是从1开始


4)        access_flags(访问标志):访问标志主要就是用于表示某个类或者接口的访问权限。


5)        this_class(类索引)和super_class(超类索引):类索引和超类索引各自会通过索引指向常量池列表中的一个类型为CONSTANT_Class_info的常量项。简单来说,索引用于确定当前类的全限定名,而超类索引则用于确定当前类的超类全限定名。


6)        interfaces_count(接口计数器)和interfaces(接口表):接口表实际上则是一个数组集合,它包含了当前类或者接口在常量池列表中直接接口的索引集合,通过这个索引即可确定当前类或者接口的超类接口的全限定名。注:数组的邻集合是从0开始。

7)        fields_count(字段计数器) 和fields(字段表):字段计数器用于表示一个字节码文件中的field_info表总数,也就是一个类变量和实例变量的总和。而字段表实际上则是一个数组集合,字段表中的每一个成员都必须是一个field_info结构的数据项。简单来说,field_info用于表示一个字段的完整信息,比如字段的标示符、访问修饰符(public、private、protected)、是类型变量还是实例变量(static修饰符)、是否是常量(final修饰符)等。

8)        method_count(方法计数器)和methods(方法表):方法计数器用于表示一个字码文件中的method_info表总数。而方法表实际上则是一个数组集合,方法表中的每一个成员都必须是一个method_info结构的数据项。

9)        attributes_count(属性计数器)和attributes(属性表):属性计数器用于表示当前字节码文件中的attribute_info表总数。而属性表同之前的字段表和方法表一个数组集合,属性表中的每一个成员都必须是一个attribute_info结构的数据项。

2.符号引用

2.1类或者接口的全限定名

字节码文件中包括所有类或者接口的名称,都是通过全限定名(Fully Qualified Name)的方式来进行表示的。在字节码中全限名中符号“.“被符号”/“进行了取代。

2.2简单名称

在字节码文件中,类或者接口中所定义的所有字段和方法名称都是使用简单名称来进行存储。比如:toString()的方法的简单名称就是toString,所以字段或者方法的简单名称中不能包括“.“、”;”、”[“、”/“等ASCII和Unicode字符表示形式。

2.3描述符

字段描述用于描述字段类型,而字段描述符则用于描述方法的返回值类型以及方法的参数数量、类型和参数顺序。




0 0
原创粉丝点击