JVM 虚拟机字节码指令表速查

主宰稳场 提交于 2019-12-14 14:07:23

【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>>

字节码     助记符     指令含义
0x00     nop     None
0x01     aconst_null     将null推送至栈顶
0x02     iconst_m1     将int型-1推送至栈顶
0x03     iconst_0     将int型0推送至栈顶
0x04     iconst_1     将int型1推送至栈顶
0x05     iconst_2     将int型2推送至栈顶
0x06     iconst_3     将int型3推送至栈顶
0x07     iconst_4     将int型4推送至栈顶
0x08     iconst_5     将int型5推送至栈顶
0x09     lconst_0     将long型0推送至栈顶
0x0a     lconst_1     将long型1推送至栈顶
0x0b     fconst_0     将float型0推送至栈顶
0x0c     fconst_1     将float型1推送至栈顶
0x0d     fconst_2     将float型2推送至栈顶
0x0e     dconst_0     将double型0推送至栈顶
0x0f     dconst_1     将double型1推送至栈顶
0x10     bipush     将单字节的常量值(-128~127)推送至栈顶
0x11     sipush     将一个短整型常量(-32768~32767)推送至栈顶
0x12     ldc     将int,float或String型常量值从常量池中推送至栈顶
0x13     ldc_w     将int,float或String型常量值从常量池中推送至栈顶(宽索引)
0x14     ldc2_w     将long或double型常量值从常量池中推送至栈顶(宽索引)
0x15     iload     将指定的int型本地变量推送至栈顶
0x16     lload     将指定的long型本地变量推送至栈顶
0x17     fload     将指定的float型本地变量推送至栈顶
0x18     dload     将指定的double型本地变量推送至栈顶
0x19     aload     将指定的引用类型本地变量推送至栈顶
0x1a     iload_0     将第一个int型本地变量推送至栈顶
0x1b     iload_1     将第二个int型本地变量推送至栈顶
0x1c     iload_2     将第三个int型本地变量推送至栈顶
0x1d     iload_3     将第四个int型本地变量推送至栈顶
0x1e     lload_0     将第一个long型本地变量推送至栈顶
0x1f     lload_1     将第二个long型本地变量推送至栈顶
0x20     lload_2     将第三个long型本地变量推送至栈顶
0x21     lload_3     将第四个long型本地变量推送至栈顶
0x22     fload_0     将第一个float型本地变量推送至栈顶
0x23     fload_1     将第二个float型本地变量推送至栈顶
0x24     fload_2     将第三个float型本地变量推送至栈顶
0x25     fload_3     将第四个float型本地变量推送至栈顶
0x26     dload_0     将第一个double型本地变量推送至栈顶
0x27     dload_1     将第二个double型本地变量推送至栈顶
0x28     dload_2     将第三个double型本地变量推送至栈顶
0x29     dload_3     将第四个double型本地变量推送至栈顶
0x2a     aload_0     将第一个引用类型本地变量推送至栈顶
0x2b     aload_1     将第二个引用类型本地变量推送至栈顶
0x2c     aload_2     将第三个引用类型本地变量推送至栈顶
0x2d     aload_3     将第四个引用类型本地变量推送至栈顶
0x2e     iaload     将int型数组指定索引的值推送至栈顶
0x2f     laload     将long型数组指定索引的值推送至栈顶
0x30     faload     将float型数组指定索引的值推送至栈顶
0x31     daload     将double型数组指定索引的值推送至栈顶
0x32     aaload     将引用类型数组指定索引的值推送至栈顶
0x33     baload     将boolean或byte型数组指定索引的值推送至栈顶
0x34     caload     将char型数组指定索引的值推送至栈顶
0x35     saload     将short型数组指定索引的值推送至栈顶
0x36     istore     将栈顶int型数值存入指定本地变量
0x37     lstore     将栈顶long型数值存入指定本地变量
0x38     fstore     将栈顶float型数值存入指定本地变量
0x39     dstore     将栈顶double型数值存入指定本地变量
0x3a     astore     将栈顶引用类型数值存入指定本地变量
0x3b     istore_0     将栈顶int型数值存入第一个本地变量
0x3c     istore_1     将栈顶int型数值存入第二个本地变量
0x3d     istore_2     将栈顶int型数值存入第三个本地变量
0x3e     istore_3     将栈顶int型数值存入第四个本地变量
0x3f     lstore_0     将栈顶long型数值存入第一个本地变量
0x40     lstore_1     将栈顶long型数值存入第二个本地变量
0x41     lstore_2     将栈顶long型数值存入第三个本地变量
0x42     lstore_3     将栈顶long型数值存入第四个本地变量
0x43     fstore_0     将栈顶float型数值存入第一个本地变量
0x44     fstore_1     将栈顶float型数值存入第二个本地变量
0x45     fstore_2     将栈顶float型数值存入第三个本地变量
0x46     fstore_3     将栈顶float型数值存入第四个本地变量
0x47     dstore_0     将栈顶double型数值存入第一个本地变量
0x48     dstore_1     将栈顶double型数值存入第二个本地变量
0x49     dstore_2     将栈顶double型数值存入第三个本地变量
0x4a     dstore_3     将栈顶double型数值存入第四个本地变量
0x4b     astore_0     将栈顶引用型数值存入第一个本地变量
0x4c     astore_1     将栈顶引用型数值存入第二个本地变量
0x4d     astore_2     将栈顶引用型数值存入第三个本地变量
0x4e     astore_3     将栈顶引用型数值存入第四个本地变量
0x4f     iastore     将栈顶int型数值存入指定数组的指定索引位置
0x50     lastore     将栈顶long型数值存入指定数组的指定索引位置
0x51     fastore     将栈顶float型数值存入指定数组的指定索引位置
0x52     dastore     将栈顶double型数值存入指定数组的指定索引位置
0x53     aastore     将栈顶引用型数值存入指定数组的指定索引位置
0x54     bastore     将栈顶boolean或byte型数值存入指定数组的指定索引位置
0x55     castore     将栈顶char型数值存入指定数组的指定索引位置
0x56     sastore     将栈顶short型数值存入指定数组的指定索引位置
0x57     pop     将栈顶数值弹出(数值不能是long或double类型的)
0x58     pop2     将栈顶的一个(对于非long或double类型)或两个数值(对于非long或double的其他类型)弹出
0x59     dup     复制栈顶数值并将复制值压入栈顶
0x5a     dup_x1     复制栈顶数值并将两个复制值压入栈顶
0x5b     dup_x2     复制栈顶数值并将三个(或两个)复制值压入栈顶
0x5c     dup2     复制栈顶一个(对于long或double类型)或两个(对于非long或double的其他类型)数值并将复制值压入栈顶
0x5d     dup2_x1     dup_x1指令的双倍版本
0x5e     dup2_x2     dup_x2指令的双倍版本
0x5f     swap     将栈顶最顶端的两个数值互换(数值不能是long或double类型)
0x60     iadd     将栈顶两int型数值相加并将结果压入栈顶
0x61     ladd     将栈顶两long型数值相加并将结果压入栈顶
0x62     fadd     将栈顶两float型数值相加并将结果压入栈顶
0x63     dadd     将栈顶两double型数值相加并将结果压入栈顶
0x64     isub     将栈顶两int型数值相减并将结果压入栈顶
0x65     lsub     将栈顶两long型数值相减并将结果压入栈顶
0x66     fsub     将栈顶两float型数值相减并将结果压入栈顶
0x67     dsub     将栈顶两double型数值相减并将结果压入栈顶
0x68     imul     将栈顶两int型数值相乘并将结果压入栈顶
0x69     lmul     将栈顶两long型数值相乘并将结果压入栈顶
0x6a     fmul     将栈顶两float型数值相乘并将结果压入栈顶
0x6b     dmul     将栈顶两double型数值相乘并将结果压入栈顶
0x6c     idiv     将栈顶两int型数值相除并将结果压入栈顶
0x6d     ldiv     将栈顶两long型数值相除并将结果压入栈顶
0x6e     fdiv     将栈顶两float型数值相除并将结果压入栈顶
0x6f     ddiv     将栈顶两double型数值相除并将结果压入栈顶
0x70     irem     将栈顶两int型数值作取模运算并将结果压入栈顶
0x71     lrem     将栈顶两long型数值作取模运算并将结果压入栈顶
0x72     frem     将栈顶两float型数值作取模运算并将结果压入栈顶
0x73     drem     将栈顶两double型数值作取模运算并将结果压入栈顶
0x74     ineg     将栈顶int型数值取负并将结果压入栈顶
0x75     lneg     将栈顶long型数值取负并将结果压入栈顶
0x76     fneg     将栈顶float型数值取负并将结果压入栈顶
0x77     dneg     将栈顶double型数值取负并将结果压入栈顶
0x78     ishl     将int型数值左移指定位数并将结果压入栈顶
0x79     lshl     将long型数值左移指定位数并将结果压入栈顶
0x7a     ishr     将int型数值右(带符号)移指定位数并将结果压入栈顶
0x7b     lshr     将long型数值右(带符号)移指定位数并将结果压入栈顶
0x7c     iushr     将int型数值右(无符号)移指定位数并将结果压入栈顶
0x7d     lushr     将long型数值右(无符号)移指定位数并将结果压入栈顶
0x7e     iand     将栈顶两int型数值"按位与"并将结果压入栈顶
0x7f     land     将栈顶两long型数值"按位与"并将结果压入栈顶
0x80     ior     将栈顶两int型数值"按位或"并将结果压入栈顶
0x81     lor     将栈顶两long型数值"按位或"并将结果压入栈顶
0x82     ixor     将栈顶两int型数值"按位异或"并将结果压入栈顶
0x83     lxor     将栈顶两long型数值"按位异或"并将结果压入栈顶
0x84     iinc     将指定int型变量增加指定值(如i++, i--, i+=2等)
0x85     i2l     将栈顶int型数值强制转换为long型数值并将结果压入栈顶
0x86     i2f     将栈顶int型数值强制转换为float型数值并将结果压入栈顶
0x87     i2d     将栈顶int型数值强制转换为double型数值并将结果压入栈顶
0x88     l2i     将栈顶long型数值强制转换为int型数值并将结果压入栈顶
0x89     l2f     将栈顶long型数值强制转换为float型数值并将结果压入栈顶
0x8a     l2d     将栈顶long型数值强制转换为double型数值并将结果压入栈顶
0x8b     f2i     将栈顶float型数值强制转换为int型数值并将结果压入栈顶
0x8c     f2l     将栈顶float型数值强制转换为long型数值并将结果压入栈顶
0x8d     f2d     将栈顶float型数值强制转换为double型数值并将结果压入栈顶
0x8e     d2i     将栈顶double型数值强制转换为int型数值并将结果压入栈顶
0x8f     d2l     将栈顶double型数值强制转换为long型数值并将结果压入栈顶
0x90     d2f     将栈顶double型数值强制转换为float型数值并将结果压入栈顶
0x91     i2b     将栈顶int型数值强制转换为byte型数值并将结果压入栈顶
0x92     i2c     将栈顶int型数值强制转换为char型数值并将结果压入栈顶
0x93     i2s     将栈顶int型数值强制转换为short型数值并将结果压入栈顶
0x94     lcmp     比较栈顶两long型数值大小, 并将结果(1, 0或-1)压入栈顶
0x95     fcmpl     比较栈顶两float型数值大小, 并将结果(1, 0或-1)压入栈顶; 当其中一个数值为NaN时, 将-1压入栈顶
0x96     fcmpg     比较栈顶两float型数值大小, 并将结果(1, 0或-1)压入栈顶; 当其中一个数值为NaN时, 将1压入栈顶
0x97     dcmpl     比较栈顶两double型数值大小, 并将结果(1, 0或-1)压入栈顶; 当其中一个数值为NaN时, 将-1压入栈顶
0x98     dcmpg     比较栈顶两double型数值大小, 并将结果(1, 0或-1)压入栈顶; 当其中一个数值为NaN时, 将1压入栈顶
0x99     ifeq     当栈顶int型数值等于0时跳转
0x9a     ifne     当栈顶int型数值不等于0时跳转
0x9b     iflt     当栈顶int型数值小于0时跳转
0x9c     ifge     当栈顶int型数值大于等于0时跳转
0x9d     ifgt     当栈顶int型数值大于0时跳转
0x9e     ifle     当栈顶int型数值小于等于0时跳转
0x9f     if_icmpeq     比较栈顶两int型数值大小, 当结果等于0时跳转
0xa0     if_icmpne     比较栈顶两int型数值大小, 当结果不等于0时跳转
0xa1     if_icmplt     比较栈顶两int型数值大小, 当结果小于0时跳转
0xa2     if_icmpge     比较栈顶两int型数值大小, 当结果大于等于0时跳转
0xa3     if_icmpgt     比较栈顶两int型数值大小, 当结果大于0时跳转
0xa4     if_icmple     比较栈顶两int型数值大小, 当结果小于等于0时跳转
0xa5     if_acmpeq     比较栈顶两引用型数值, 当结果相等时跳转
0xa6     if_acmpne     比较栈顶两引用型数值, 当结果不相等时跳转
0xa7     goto     无条件跳转
0xa8     jsr     跳转至指定的16位offset位置, 并将jsr的下一条指令地址压入栈顶
0xa9     ret     返回至本地变量指定的index的指令位置(一般与jsr或jsr_w联合使用)
0xaa     tableswitch     用于switch条件跳转, case值连续(可变长度指令)
0xab     lookupswitch     用于switch条件跳转, case值不连续(可变长度指令)
0xac     ireturn     从当前方法返回int
0xad     lreturn     从当前方法返回long
0xae     freturn     从当前方法返回float
0xaf     dreturn     从当前方法返回double
0xb0     areturn     从当前方法返回对象引用
0xb1     return     从当前方法返回void
0xb2     getstatic     获取指定类的静态域, 并将其压入栈顶
0xb3     putstatic     为指定类的静态域赋值
0xb4     getfield     获取指定类的实例域, 并将其压入栈顶
0xb5     putfield     为指定类的实例域赋值
0xb6     invokevirtual     调用实例方法
0xb7     invokespecial     调用超类构建方法, 实例初始化方法, 私有方法
0xb8     invokestatic     调用静态方法
0xb9     invokeinterface     调用接口方法
0xba     invokedynamic     调用动态方法
0xbb     new     创建一个对象, 并将其引用引用值压入栈顶
0xbc     newarray     创建一个指定的原始类型(如int, float, char等)的数组, 并将其引用值压入栈顶
0xbd     anewarray     创建一个引用型(如类, 接口, 数组)的数组, 并将其引用值压入栈顶
0xbe     arraylength     获取数组的长度值并压入栈顶
0xbf     athrow     将栈顶的异常抛出
0xc0     checkcast     检验类型转换, 检验未通过将抛出 ClassCastException
0xc1     instanceof     检验对象是否是指定类的实际, 如果是将1压入栈顶, 否则将0压入栈顶
0xc2     monitorenter     获得对象的锁, 用于同步方法或同步块
0xc3     monitorexit     释放对象的锁, 用于同步方法或同步块
0xc4     wide     扩展本地变量的宽度
0xc5     multianewarray     创建指定类型和指定维度的多维数组(执行该指令时, 操作栈中必须包含各维度的长度值), 并将其引用压入栈顶
0xc6     ifnull     为null时跳转
0xc7     ifnonnull     不为null时跳转
0xc8     goto_w     无条件跳转(宽索引)
0xc9     jsr_w     跳转至指定的32位offset位置, 并将jsr_w的下一条指令地址压入栈顶
      LOCK     

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!