java字节码本质是java程序的格式化表示,便于机器处理。所以他是java程序的另一种表示,java程序包含的信息他都包含并且更加结构化。
java虚拟机字节码格式:
magic
魔数,标识该文件是一个字节码文件。
minor_version
major_version
字节码的版本号
constant_pool
常量池,存储字节码中的常量数据以及符号引用。常量数据包括有utf8、Integer、float、long、double几种类型。符号引用包括有class、field、method
因为java在编译的时候,不像c有连接的过程,虚拟机加载的时候是动态连接,所以需要存储符号引用以便虚拟机加载的时候进行连接。
access_flags
访问标识。
this_class
类索引,指向一个常量池中的class类型
super_class
父类索引,指向一个常量池中的class类型
interfaces
接口索引,指向多个常量池中的class类型
fields
字段,存储类的字段定义。
methods
方法,存储类的方法定义。
attributes
属性表用于存储class文件、字段、方法的专有信息,如下所示。字段和方法都有自己的属性定义。
属性名称 | 使用位置 | 含义 |
code | 方法 | 字节码指令 |
ConstantValue | 字段 | final定义的常量 |
Deprecated | 类、方法、字段 | 声名位deprecated的类、字段、方法 |
Exceptions | 方法 | 方法抛出的异常 |
InnerClasses | 类 | 内部类列表 |
LineNumberTable | code | 源码行号欲指令对应关系 |
LocalVariableTable | code | 方法局部变量 |
SourceFile | 类 | 原文件名称 |
Synthetic | 类、方法、字段 | 编译器自动生成 |
原文地址:https://www.cnblogs.com/zhangwanhua/p/7427123.html
时间: 2024-10-07 21:01:52