JVM学习笔记-class文件的构造

1、class文件构造:

  •           1.魔数(u4)

  •         2.次版本号(u2)

  •         3.主版本号(u2)

  •         4.constant_pool_count(常量个数   u2)

  •         5.常量池表(constat_pool_count -1  cp_info )

  •         6.access_flags(类的访问修饰符  u2)

  •         7.this_class(类名  u2)

  •         8.super_class(类名  u2)

  •         9.interfaces_count(接口个数  u2)

  •         10.interfaces(接口名 (一个接口名 u2)     = 接口的个数  u2)

  •         11.fields_count(字段域个数 u2)

  •         12.fields(字段域的表  = 域个数  field_info)

  •         12.methods_cunt (方法的个数 u2)

  •         13.methods(方法的表 个数为方法的个数 method_info)

  •         14.attributes_count(附加属性的个数  u2)

  •         15.attributes(附加属性的表  attribute_info)

2.class 字节码数据类型

        1.字节数据直接量:这是基本的额数据类型,分别是 u1  u2  u4  u8 四种 

            分别代表连续的1个字节  2个字节  4个字节  8个字节

        2.表(数组):表是由多个基本数据或其他表,按照既定顺序组成的大的数据集合,表是有结构的:

            它的结构体现在:组成表的成分所在的位置和顺序都是已经严格定义号的

 

3.class文件结构中常量池中常见的11中数据类型的结构总表

    JVM学习笔记-class文件的构造_第1张图片

 

JDK1.7版本后又增加了三种:CONSTANT_MethodHandle_info,CONSTANT_MethodType_info  以及CONSTANT_InvokeDynamic_info(对应的动态调用)

一共是14种

4.ACCESS_FLAGS类的访问标识符

JVM学习笔记-class文件的构造_第2张图片

ACC_PRIVATE             0x0002  私有的

5 fields 字段表

    字段表是用于描述类和接口中所申明的变量,不包括方法内部的局部变量,包括类级别的变量以及实例变量

 

JVM学习笔记-class文件的构造_第3张图片

6.methods 方法表

JVM学习笔记-class文件的构造_第4张图片

方法中的attribute_info的结构

JVM学习笔记-class文件的构造_第5张图片

 1)JVM预定了部分attribute,但是编译器自己也可以实现自己的attribute写入class文件里,供运行使用

JVM学习笔记-class文件的构造_第6张图片

2)不同的attribute通过attribute_name_index来区分

 

7.class常量池中的code代表对应方法中的code代码块,CODE的作用是

保存该方法的结构,如对应的字节码,如下图为结构图

1)attribute_length表示attribute所包含的字节数,不包含                      attribute_name_index和attribute_length字段

2)max_stack表示这个方法运行的任何时刻所能达到的操作数栈的最大深度

3)max_locals表示这个方法运行期间所创建的局部变量的数目,包含用来表示传入的参数的局部变量

JVM学习笔记-class文件的构造_第7张图片

你可能感兴趣的:(JVM学习)