jvm

108 阅读2分钟

一起养成写作习惯!这是我参与「掘金日新计划 · 4 月更文挑战」的第2天,点击查看活动详情

Class文件是

组以8个字节为基础单位的二进制流,各个数据项

目严格按照顺序紧凑地排列在文件之中,中间没有添加任何分隔

符,这使得整个Class文件中存储的内容几乎全部是程序运行的必

要数据,没有空隙存在。

根据《Java虚拟机规范》的规定,Class文件格式采用

种类似于

C语言结构体的伪结构来存储数据,这种伪结构中只有两种数据

类型:

无符号数

无符号数属于基本的数据类型,以u1、u2、u4、u8来分别代表1

个字节、2个字节、4个字节和8个字节的无符号数,无符号数可

以用来描述数字、索引引用、数量值或者按照UTF

8编码构成字

符串值。

表是由多个无符号数或者其他表作为数据项构成的复合数据类型,

为了便于区分,所有表的命名都习惯性地以

_info

结尾。表用于

描述有层次关系的复合结构的数据,整个Class文件本质上也可以

视作是

一张表,这张表由表6

-1所示的数据项按严格顺序排列构成

每个Class文件的头4个字节被称为魔数(Magic Number),它的唯

一作用是确定这个文件是否为

一个能被虚拟机接受的Class文件。

紧接着魔数的4个字节存储的是Class文件的版本号:第5和第6个字节是次版本号(Minor Version),第7

和第8个字节是主版本号(Major Version)。Java的版本号是从45开始的,JDK 1.1之后的每个JDK大版本

发布主版本号向上加1