JVM——字节码文件
一 字节码文件的组成
字节码文件由以下几个部分组成:
基本信息
常量池
访问标识
字段
方法
属性
二 基本信息
魔数 Magic
软件使用文件的头几个字节来校验文件的类型,字节码文件的前4个字节为CAFEBABE。
主副版本号
主副版本号指的是编译字节码文件的JDK版本号,主版本号用来标识大版本,JDK1.0-1.1使用了45.0-45.3,JDK1.2是46之后每升级一个大版本就加1。
1.2版本之后大版本号计算方法为:主版本号 - 44。例如主版本号52为JDK8。
版本号的作业主要是判断当前字节码的版本和运行时的JDK是否兼容。
例如上图报错说明,字节码文件为JDK8,但运行时环境为JDK6。
三 常量池
包含:
字面量
符号引用
四 访问标志 access flags
两个字节,用来标识该Class是否为public、final、interface、abstract等等。
五 当前类、父类、接口索引集合
1 | u2 this_class;//当前类 |
六 字段表集合 Fields
1 | u2 fields_count;//字段数量 |
七 方法表集合 Methods
1 | u2 methods_count;//方法数量 |
八 属性表集合 Attributes
在 Class 文件,字段表,方法表中都可以携带自己的属性表集合,以用于描述某些场景专有的信息。