jvm常用操作码
常见的常量入栈的操作码有 const push idc
1,const i l f d a分别表示 int long float double 对象引用
如:aconst_null 将null对象引用压入栈iconst_m1 将int类型-1压入栈iconst_1 将int类型的1压入栈lconst_3 将long类型的3压入栈2,push
bipush 8位带符号的整数压入栈 sipush 16位带符号的整数压入栈3,idc 将常量池中的项压入栈
局部变量中的装载值指令 load
格式和const差不多,如iload_1 表示从局部变量1中装载int类型值,对于从数组中装载则由两位字母+load表示 如:
aaload表示从数组中装载引用类型iaload表示从数组中装载int类型
值存入局部变量指令 store
格式同上 如:
aastore表示将引用类型值存入数组istore_0表示将int类型值存入局部变量0
通用指令
popn 弹出栈顶n个字长的内容(n为1时省略) dupn 复制栈顶n个字长的内容(n为1时省略) dupn_xm 复制栈顶n个字长的内容,然后将复制的内容及原来弹出的n+m个字长压入栈 如: dup_x2表示复制栈顶1个字长的内容,然后将复制的内容及原来弹出的3个字长压入栈 swap 交换栈顶两个字长的内容
类型转换指令
i2l:表示int转为long 其余类似
运算指令
add表示加 。。。。 rem取余 neg取反iinc 将常量值加入到int中sh 移位操作
对象操作指令
new 创建一个新对象checkcast 检查类型getfield 从对象中获取字段putfield 设置对象中字段的值getstatic 获取类中的静态字段putstatic 设置类中静态字段的值instanceof 判断类型匹配
方法调用及返回指令
invokevirtual 根据运行时对像类型调用方法 invokespecial 根据编译时的类型调用实例方法以及编译源码生成的init方法 invokestatic 调用静态方法 invokeinterface 调用接口方法 return 返回指令 ireturn返回int return 返回void