字节码
字节码
Java 字节码 (Java bytecode) 是Java虚拟机执行的一种指令格式,即扩展名为.class的文件。由于字节码并不针对一种特定的机器,因此,Java 程序无须重新编译便可在多种不同操作系统的计算机上运行。之所以被称为字节码是因为.class文件是由十六进制值组成的,JVM以两个十六进制值为一组,就是以字节为单位进行读取。
Java 程序从源代码到运行的过程如下图所示:
字节码的组成如下:
- 魔数:固定值:0xCAFEBABE,用来判断文件是否是一个.class文件。
- 版本号:JDK版本号。
- 常量池:常量池中有两类常量:字面量和符号引用。字面量是final修饰的常量值。符号引用就是类和接口的全局限定名、字段的名称和描述符、方法的名称和描述符。常量池整体分为两个部分:常量池计数器和常量池数据区。
- 访问标志:描述是类还是接口,以及是否被public、abstract、final等修饰符修饰。
- 当前类的索引:描述当前类的全限定名。根据索引值就可以去常量池查找。
- 父类索引:父类的全限定名。
- 接口索引:接口计数器,所有接口字符串常量的索引值。
- 字段表:描述类和接口中声明的变量和实例变量,一部分是计数器、一部分是详细信息。
- 方法表:一部分是方法个数,一部分是方法访问信息。
- 附加属性:。
参考内容: