JAVA字节码文件格式

字节码文件(.class)的格式固定如下

因为觉得这几张表后面的学习可能会用到,所以在https://www.cnblogs.com/paddix/p/5282004.html盗窃了这几张图,留作备份。

目录

字节码文件(.class)的格式固定如下

因为觉得这几张表后面的学习可能会用到,所以在https://www.cnblogs.com/paddix/p/5282004.html盗窃了这几张图,留作备份。

以下数字均表示相应组成部分占据字节大小,如4magic代表文件格式这个参数在生成的字节码文件里占据4个字节

以下是一个空白的JAVA文件对应的字节码文件里的信息


以下数字均表示相应组成部分占据字节大小,如4magic代表文件格式这个参数在生成的字节码文件里占据4个字节

4magic+2minor_version+2major_version+2constant_pool_count+constant_pool[-1]

+2access_flags+2this_class+2super_class+2interfaces_count+2interfaces[]+

2fiellds_count+fields[]+2methods_count+methods[]+2attributes_count+attributes[]

共需要1+5张表来说明这5个数组和常量池

以下是一个空白的JAVA文件对应的字节码文件里的信息

JAVA字节码文件格式_第1张图片

2.常量池的数据类型是表,它的类型包括以下14种

JAVA字节码文件格式_第2张图片

3.每种常量类型对应的表结构如下:(共14种)

常量

项目

类型

描述

CONSTANT_Utf8_info

tag

u1

1

length

u2

字节数

bytes

u1

utf-8编码的字符串

CONSTANT_Integer_info

tag

u1

3

bytes

u4

int值

CONSTANT_Float_info

tag

u4

4

bytes

u1

float值

CONSTANT_Long_info

tag

u1

5

bytes

u8

long值

CONSTANT_Double_info

tag

u1

6

bytes

u8

double值

CONSTANT_Class_info

tag

u1

7

index

u2

指向全限定名常量项的索引

CONSTANT_String_info

tag

u1

8

index

u2

指向字符串常量的索引

CONSTANT_Fieldref_info

tag

u1

9

index

u2

指向声明字段的类或接口描述符CONSTANT_Class_info的索引值

index

u2

指向CONSTANT_NameAndType_info的索引值

CONSTANT_Methodref_info

tag

u1

10

index

u2

指向声明方法的类描述符CONSTANT_Class_info的索引值

index

u2

指向CONSTANT_NameAndType_info的索引值

CONSTANT_InterfaceMethodref_info

tag

u1

11

index

u2

指向声明方法的接口描述符CONSTANT_Class_info的索引值

index

u2

指向CONSTANT_NameAndType_info的索引值

CONSTANT_NameAndType_info

tag

u1

12

index

u2

指向该字段或方法名称常量的索引值

index

u2

指向该字段或方法描述符常量的索引值

CONSTANT_MethodHandle_info

tag

u1

15

reference_kind

u1

值必须1~9,它决定了方法句柄的的类型

reference_index

u2

对常量池的索引

CONSTANT_MethodType_info

tag

u1

16

description_index

u2

对常量池中方法描述符的索引

CONSTANT_InvokeDynamic_info

tag

u1

18

bootstap_method_attr_index

u2

对引导方法表的索引

name_and_type_index

u2

对CONSTANT_NameAndType_info的索引

4.访问标识符规定

JAVA字节码文件格式_第3张图片

5.方法表的结构如下:(领域表和接口表这里没有介绍)

Type Descriptor
u2 access_flag
u2 name_index
u2 descriptor_index
u2 attributes_count
attribute_info attribute_info[attributes_count]

 6.属性表如下:

Type Descriptor
u2 attribute_name_index
u4 attribute_length
u1 bytes

你可能感兴趣的:(JAVA,JVM)