1. Class文件结构概述
源代码经过编译器之后便会生成一个字节码文件,字节码是一种二进制的类文件,它的内容是JVM的字节码指令,而不像C,C++经过编译器直接生成机器码。
本篇主要描述Class文件的格式,Java虚拟机规定用u1,u2,u4三种结构来表示1,2,4字节无符号整数,相同类型的若干条数据集合用表的形式来存储。表是一个变长的结构,由代表长度的表头n和紧随着n个数据项组成。Class文件采用类似C语言的结构体来存储数据。如下:
一个Class文件的组成结构:
ClassFile {
u4 magic;
u2 minor_version;
u2 major_version;
u2 constant_pool_count;
cp_info constant_pool[constant_pool_count-1];
u2 access_flags;
u2 this_class;
u2 super_class;
u2 interfaces_count;
u2 interfaces[interfaces_count];
u2 fields_count;
field_info fields[fields_count];
u2 methods_count;
method_info methods[methods_count];
u2 attributes_count;
attribute_info attributes[attributes_count];
}
参考官网文档:https://docs.oracle.com/javase/specs/jvms/se8/html/jvms-4.html#jvms-4.1
2. 什么是字节码指令
Java虚拟机的指令由一个字节长度的,代表这某种特点含义的操作码(opcode)以及跟随气候的零至多个代表操作所需要的参数的操作数ÿ