JVM指令手册

栈和局部变量操作将常量压入栈的指令aconst_null将null对象引用压入栈iconst_m1将int类型常量-1压入栈iconst_0将int类型常量0压入栈iconst_1将int类型常量1压入操作数栈iconst_2将int类型常量2压入栈iconst_3将int类型常量3压入栈iconst_4将int类型常量4压入栈iconst_5将int类型常量5压入栈lconst_0将long类型常量0压入栈lconst_1将long类型常量1压入栈fconst_0将float类型常量0压入栈fconst_1将float类型常量1压入栈dconst_0将double类型常量0压入栈dconst_1将double类型常量1压入栈bipush将一个8位带符号整数压入栈sipush将16位带符号整数压入栈ldc把常量池中的项压入栈ldc_w把常量池中的项压入栈(使用宽索引)ldc2_w把常量池中long类型或者double类型的项压入栈(使用宽索引)从栈中的局部变量中装载值的指令iload从局部变量中装载int类型值lload从局部变量中装载long类型值fload从局部变量中装载float类型值dload从局部变量中装载double类型值aload从局部变量中装载引用类型值(refernce)iload_0从局部变量0中装载int类型值iload_1从局部变量1中装载int类型值iload_2从局部变量2中装载int类型值iload_3从局部变量3中装载int类型值lload_0从局部变量0中装载long类型值lload_1从局部变量1中装载long类型值lload_2从局部变量2中装载long类型值lload_3从局部变量3中装载long类型值fload_0从局部变量0中装载float类型值fload_1从局部变量1中装载float类型值
fload_2从局部变量2中装载float类型值fload_3从局部变量3中装载float类型值dload_0从局部变量0中装载double类型值dload_1从局部变量1中装载double类型值dload_2从局部变量2中装载double类型值dload_3从局部变量3中装载double类型值aload_0从局部变量0中装载引用类型值aload_1从局部变量1中装载引用类型值aload_2从局部变量2中装载引用类型值aload_3从局部变量3中装载引用类型值iaload从数组中装载int类型值laload从数组中装载long类型值faload从数组中装载float类型值daload从数组中装载double类型值aaload从数组中装载引用类型值baload从数组中装载byte类型或boolean类型值caload从数组中装载char类型值saload从数组中装载short类型值将栈中的值存入局部变量的指令istore将int类型值存入局部变量lstore将long类型值存入局部变量fstore将float类型值存入局部变量dstore将double类型值存入局部变量astore将将引用类型或returnAddress类型值存入局部变量istore_0将int类型值存入局部变量0istore_1将int类型值存入局部变量1istore_2将int类型值存入局部变量2istore_3将int类型值存入局部变量3lstore_0将long类型值存入局部变量0lstore_1将long类型值存入局部变量1lstore_2将long类型值存入局部变量2lstore_3将long类型值存入局部变量3fstore_0将float类型值存入局部变量0fstore_1将float类型值存入局部变量1fstore_2将float类型值存入局部变量2fstore_3将float类型值存入局部变量3dstore_0将double类型值存入局部变量0dstore_1将double类型值存入局部变量1
dstore_2将double类型值存入局部变量2dstore_3将double类型值存入局部变量3astore_0将引用类型或returnAddress类型值存入局部变量0astore_1将引用类型或returnAddress类型值存入局部变量1astore_2将引用类型或returnAddress类型值存入局部变量2astore_3将引用类型或returnAddress类型值存入局部变量3iastore将int类型值存入数组中lastore将long类型值存入数组中fastore将float类型值存入数组中dastore将double类型值存入数组中aastore将引用类型值存入数组中bastore将byte类型或者boolean类型值存入数组中castore将char类型值存入数组中sastore将short类型值存入数组中wide指令wide使用附加字节扩展局部变量索引通用(无类型)栈操作nop不做任何操作pop弹出栈顶端一个字长的内容pop2弹出栈顶端两个字长的内容dup复制栈顶部一个字长内容dup_x1复制栈顶部一个字长的内容,然后将复制内容及原来弹出的两个字长的内容压入栈dup_x2复制栈顶部一个字长的内容,然后将复制内容及原来弹出的三个字长的内容压入栈dup2复制栈顶部两个字长内容dup2_x1复制栈顶部两个字长的内容,然后将复制内容及原来弹出的三个字长的内容压入栈dup2_x2复制栈顶部两个字长的内容,然后将复制内容及原来弹出的四个字长的内容压入栈swap交换栈顶部两个字长内容类型转换i2l把int类型的数据转化为long类型i2f把int类型的数据转化为float类型i2d把int类型的数据转化为double类型l2i把long类型的数据转化为int类型l2f把long类型的数据转化为float类型l2d把long类型的数据转化为double类型
f2i把float类型的数据转化为int类型f2l把float类型的数据转化为long类型f2d把float类型的数据转化为double类型d2i把double类型的数据转化为int类型d2l把double类型的数据转化为long类型d2f把double类型的数据转化为float类型i2b把int类型的数据转化为byte类型i2c把int类型的数据转化为char类型i2s把int类型的数据转化为short类型整数运算iadd执行int类型的加法ladd执行long类型的加法isub执行int类型的减法lsub执行long类型的减法imul执行int类型的乘法lmul执行long类型的乘法idiv执行int类型的除法ldiv执行long类型的除法irem计算int类型除法的余数lrem计算long类型除法的余数ineg对一个int类型值进行取反操作lneg对一个long类型值进行取反操作iinc把一个常量值加到一个int类型的局部变量上逻辑运算移位操作ishl执行int类型的向左移位操作lshl执行long类型的向左移位操作ishr执行int类型的向右移位操作lshr执行long类型的向右移位操作iushr执行int类型的向右逻辑移位操作lushr执行long类型的向右逻辑移位操作按位布尔运算iand对int类型值进行“逻辑与”操作land对long类型值进行“逻辑与”操作ior对int类型值进行“逻辑或”操作lor对long类型值进行“逻辑或”操作ixor对int类型值进行“逻辑异或”操作lxor对long类型值进行“逻辑异或”操作
浮点运算fadd执行float类型的加法dadd执行double类型的加法fsub执行float类型的减法dsub执行double类型的减法fmul执行float类型的乘法dmul执行double类型的乘法fdiv执行float类型的除法ddiv执行double类型的除法frem计算float类型除法的余数drem计算double类型除法的余数fneg将一个float类型的数值取反dneg将一个double类型的数值取反对象和数组对象操作指令new创建一个新对象checkcast确定对象为所给定的类型getfield从对象中获取字段putfield设置对象中字段的值getstatic从类中获取静态字段putstatic设置类中静态字段的值instanceof判断对象是否为给定的类型数组操作指令newarray分配数据成员类型为基本上数据类型的新数组anewarray分配数据成员类型为引用类型的新数组arraylength获取数组长度multianewarray分配新的多维数组控制流条件分支指令ifeq如果等于0,则跳转ifne如果不等于0,则跳转iflt如果小于0,则跳转ifge如果大于等于0,则跳转ifgt如果大于0,则跳转ifle如果小于等于0,则跳转if_icmpcq如果两个int值相等,则跳转if_icmpne如果两个int类型值不相等,则跳转if_icmplt如果一个int类型值小于另外一个int类型值,则跳转
if_icmpge如果一个int类型值大于或者等于另外一个int类型值,则跳转if_icmpgt如果一个int类型值大于另外一个int类型值,则跳转if_icmple如果一个int类型值小于或者等于另外一个int类型值,则跳转ifnull如果等于null,则跳转ifnonnull如果不等于null,则跳转if_acmpeq如果两个对象引用相等,则跳转if_acmpnc如果两个对象引用不相等,则跳转比较指令lcmp比较long类型值fcmpl比较float类型值(当遇到NaN时,返回-1)fcmpg比较float类型值(当遇到NaN时,返回1)dcmpl比较double类型值(当遇到NaN时,返回-1)dcmpg比较double类型值(当遇到NaN时,返回1)无条件转移指令goto无条件跳转goto_w无条件跳转(宽索引)表跳转指令tableswitch通过索引访问跳转表,并跳转lookupswitch通过键值匹配访问跳转表,并执行跳转操作异常athrow抛出异常或错误finally子句jsr跳转到子例程jsr_w跳转到子例程(宽索引)rct从子例程返回方法调用与返回方法调用指令invokcvirtual运行时按照对象的类来调用实例方法invokespecial根据编译时类型来调用实例方法invokestatic调用类(静态)方法invokcinterface调用接口方法方法返回指令ireturn从方法中返回int类型的数据lreturn从方法中返回long类型的数据freturn从方法中返回float类型的数据dreturn从方法中返回double类型的数据areturn从方法中返回引用类型的数据return从方法中返回,返回值为void
线程同步montiorenter进入并获取对象监视器monitorexit释放并退出对象监视器JVM指令助记符变量到操作数栈:iload,iload_,lload,lload_,fload,fload_,dload,dload_,aload,aload_操作数栈到变量:istore,istore_,lstore,lstore_,fstore,fstore_,dstore,dstor_,astore,astore_常数到操作数栈:bipush,sipush,ldc,ldc_w,ldc2_w,aconst_null,iconst_ml,iconst_,lconst_,fconst_,dconst_加:iadd,ladd,fadd,dadd减:isub,lsub,fsub,dsub乘:imul,lmul,fmul,dmul除:idiv,ldiv,fdiv,ddiv余数:irem,lrem,frem,drem取负:ineg,lneg,fneg,dneg移位:ishl,lshr,iushr,lshl,lshr,lushr按位或:ior,lor按位与:iand,land按位异或:ixor,lxor类型转换:i2l,i2f,i2d,l2f,l2d,f2d(放宽数值转换)i2b,i2c,i2s,l2i,f2i,f2l,d2i,d2l,d2f(缩窄数值转换)创建类实便:new创建新数组:newarray,anewarray,multianwarray访问类的域和类实例域:getfield,putfield,getstatic,putstatic把数据装载到操作数栈:baload,caload,saload,iaload,laload,faload,daload,aaload从操作数栈存存储到数组:bastore,castore,sastore,iastore,lastore,fastore,dastore,aastore获取数组长度:arraylength检相类实例或数组属性:instanceof,checkcast操作数栈管理:pop,pop2,dup,dup2,dup_xl,dup2_xl,dup_x2,dup2_x2,swap有条件转移:ifeq,iflt,ifle,ifne,ifgt,ifge,ifnull,ifnonnull,if_icmpeq,if_icmpene,if_icmplt,if_icmpgt,if_icmple,if_icmpge,if_acmpeq,if_acmpne,lcmp,fcmplfcmpg,dcmpl,dcmpg复合条件转移:tableswitch,lookupswitch无条件转移:goto,goto_w,jsr,jsr_w,ret调度对象的实便方法:invokevirtual调用由接口实现的方法:invokeinterface调用需要特殊处理的实例方法:invokespecial
调用命名类中的静态方法:invokestatic方法返回:ireturn,lreturn,freturn,dreturn,areturn,return异常:athrowfinally关键字的实现使用:jsr,jsr_w,ret

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

技术学习分享

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值