字节码

字节码

Java 字节码 (Java bytecode) 是Java虚拟机执行的一种指令格式,即扩展名为.class的文件。由于字节码并不针对一种特定的机器,因此,Java 程序无须重新编译便可在多种不同操作系统的计算机上运行。之所以被称为字节码是因为.class文件是由十六进制值组成的,JVM以两个十六进制值为一组,就是以字节为单位进行读取。

Java 程序从源代码到运行的过程如下图所示:

字节码的组成如下:

  • 魔数:固定值:0xCAFEBABE,用来判断文件是否是一个.class文件。
  • 版本号:JDK版本号。
  • 常量池:常量池中有两类常量:字面量和符号引用。字面量是final修饰的常量值。符号引用就是类和接口的全局限定名、字段的名称和描述符、方法的名称和描述符。常量池整体分为两个部分:常量池计数器和常量池数据区。
  • 访问标志:描述是类还是接口,以及是否被public、abstract、final等修饰符修饰。
  • 当前类的索引:描述当前类的全限定名。根据索引值就可以去常量池查找。
  • 父类索引:父类的全限定名。
  • 接口索引:接口计数器,所有接口字符串常量的索引值。
  • 字段表:描述类和接口中声明的变量和实例变量,一部分是计数器、一部分是详细信息。
  • 方法表:一部分是方法个数,一部分是方法访问信息。
  • 附加属性:。

参考内容:

posted @ 2023-06-11 13:13  zhxxx  阅读(6)  评论(0编辑  收藏  举报