字节码文件详解
组成
基础信息
魔数
位于文件开头4个字节
文件拓展名无法确定文件类型,软件都是通过校验文件开头字节确认自己是否支持文件的,.class文件开头固定为CAFEBABE,即魔术
主副版本号
用于判断字节码文件和jdk是否版本兼容
常量池
避免相同的内容重复定义,节省空间,一些变量的名字也会采用常量池的引用
方法
操作数栈
临时存放即将运算的数据,先入后出,有栈的性质
局部变量表
存放局部变量数据,底层实现为一维数组,[0]
位存放入口参数args
常见字节码命令
-
iconst_0
将数字0放入操作数栈 -
istore_1
将操作数栈的数据取出放到局部变量表[1]
的位置 -
iload_1
将局部变量表[1]
的数据复制到操作数栈 -
iadd
操作数栈的两个数执行加法操作 -
return
方法结束返回