要理解这段字节码指令是如何执行的,我们需要先理解两块内存区域:操作数栈和局部变量表。
操作数栈是用来存放临时数据的内容,是一个栈式的结构,先进后出。
局部变量表是存放方法中的局部变量,包含方法的参数、方法中定义的局部变量,在编译期就已经可以确定方法有多少个局部变量。
字节码指令文档:第 6 章。Java 虚拟机指令集
字节码文件总共可以分为以下几个部分:
-
基础信息:魔数、字节码文件对应的Java版本号、访问标识(public final等等)、父类和接口信息
-
常量池: 保存了字符串常量、类或接口名、字段名,主要在字节码指令中使用
-
字段: 当前类或接口声明的字段信息
-
方法: 当前类或接口声明的方法信息,核心内容为方法的字节码指令
-
属性: 类的属性,比如源码的文件名、内部类的列表等
打开idea的插件页面,搜索jclasslib,这是一个查看字节码的插件,好用
2024年7月4日18点22分