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