常用字节码指令

操作码 操作数 说明
iconst_x 将int类型x压入栈
fconst_x 将float类型x压入栈
lconst_x 将long类型x压入栈
dconst_x 将double类型x压入栈
ldc indexbyte(8) 从由indexbyte指向的运行时常量池入口取出一个字长的值,将其压入栈
ldc_w indexbyte(16) 从由indexbyte指向的运行时常量池入口取出一个字长的值,将其压入栈
ldc2_w indexbyte(16) 从由indexbyte指向的运行时常量池入口取出两个字长的值,将其压入栈
pop 从操作数栈弹出栈顶的一个字
swap 交换栈顶的两个字
dup 复制栈顶的一个字并压栈
iload vindex 将位置为 vindex的int局部变量压入栈
iload_x 将位置为x的int局部变量压入栈
aload vindex 将位置为 vindex的对象引用局部变量压入栈
aload_x 将位置为 x的对象引用局部变量压入栈
istore vindex 从栈中弹出int值,将其存入局部变量表 vindex位置
istore _x 从栈中弹出int值,将其存入局部变量表x位置
astore vindex 从栈中弹出对象引用,将其存入局部变量表 vindex位置
astore _x 从栈中弹出对象引用,将其存入局部变量表x位置
invokespecial 调用特殊的一些方法,比如构造函数,类的私有方法,父类的方法。这些方法是静态类型绑定的,不会在调用时进行动态派发;
invokevirtual 虚函数调用,调用对象的实例方法,根据对象的实际类型进行派发,支持多态;
invokestatic 调用类的静态方法,这个也是静态绑定的
getstatic 读取类的静态字段
getfield 读取实例对象字段
if_acmpeq 比较对象是否相等,真则跳转
if_acmpne 比较对象是否不相等,真则跳转