JVM(2)—字节码文件
JVM(2)—字节码文件
什么是字节码文件
.java源码经过javac编译生成的二进制文件,称为字节码文件。
JVM通过字节码保证平台无关特性。
Java并不是唯一生成class文件的语言。
Class是结构紧凑的二进制流,格式固定,要求严谨。
字节码的组成结构
1.魔数。 2.文件版本。 3.常量池。 4.访问标志。 5.类/父类索引与接口索引集合。 6.字段表合集。 7.方法表合集。 8.属性表。
魔数
区分文件类型的依据。CAFEBABE是Java字节码文件的魔数,保存在前4个字节。
文件版本
5-6字节是次要版本号。7-8字节是主要版本号。JVM版本若低于字节码的版本,将报错UnsupportedClassVersionError。
常量池
- 字面量:字符串和final修饰的数值
- 符号引用
- 常量池类型数据表
访问标志
类/父类索引与接口索引集合
字段表
字段的名称与访问标志。
方法表
方法的名称与访问标志。
属性表
字节码指令
保存在Method描述中,一般不超过256个。