现在的位置: 首页 > 编程语言 > 正文

JVM常用指令速查表

2020年02月18日 编程语言 ⁄ 共 7304字 ⁄ 字号 评论关闭

JVM 基本指令

基本指令集是最常用的,总结如下:

指令 释义

iconst_1int型常量值1进栈bipush将一个byte型常量值推送至栈顶iload_1第二个int型局部变量进栈,从0开始计数istore_1将栈顶int型数值存入第二个局部变量,从0开始计数iadd栈顶两int型数值相加,并且结果进栈return当前方法返回voidgetstatic获取指定类的静态域,并将其值压入栈顶putstatic为指定的类的静态域赋值invokevirtual调用实例方法invokespecial调用超类构造方法、实例初始化方法、私有方法invokestatic调用静态方法invokeinterface调用接口方法new创建一个对象,并且其引用进栈newarray创建一个基本类型数组,并且其引用进栈

JVM 指令集

这个指令集也不是最全的,但是 99% 的都收录了进来。这个表格包含:指令码、助记符、功能描述三列。

指令码 助记符 功能描述

0x00nop无操作0x01aconst_null指令格式:aconst_null 功能描述:null进栈。注意:JVM并没有为null指派一个具体的值。0x02iconst_m1int型常量值-1进栈0x03iconst_0int型常量值0进栈0x04iconst_1int型常量值1进栈0x05iconst_2int型常量值2进栈0x06iconst_3int型常量值3进栈0x07iconst_4int型常量值4进栈0x08iconst_5int型常量值5进栈0x09lconst_0long型常量值0进栈0x0Alconst_1long型常量值1进栈0x0Bfconst_0float型常量值0进栈0x0Cfconst_1float型常量值1进栈0x0Dfconst_2float型常量值2进栈0x0Edconst_0double型常量值0进栈0x0Fdconst_1double型常量值1进栈0x10bipush将一个byte型常量值推送至栈顶0x11sipush将一个short型常量值推送至栈顶0x12ldc将int、float或String型常量值从常量池中推送至栈顶0x13ldc_w将int、float或String型常量值从常量池中推送至栈顶(宽索引)0x14ldc2_w将long或double型常量值从常量池中推送至栈顶(宽索引)0x15iload指定的int型局部变量进栈0x16lload指定的long型局部变量进栈0x17fload指定的float型局部变量进栈0x18dload指定的double型局部变量进栈0x19aload指令格式:aload index。功能描述:当前frame的局部变量数组中下标为 index 的引用型局部变量进栈。index:无符号一byte整型。和wide指令联用,可以使index为两byte。0x1Aiload_0第一个int型局部变量进栈0x1Biload_1第二个int型局部变量进栈0x1Ciload_2第三个int型局部变量进栈0x1Diload_3第四个int型局部变量进栈0x1Elload_0第一个long型局部变量进栈0x1Flload_1第二个long型局部变量进栈0x20lload_2第三个long型局部变量进栈0x21lload_3第四个long型局部变量进栈0x22fload_0第一个float型局部变量进栈0x23fload_1第二个float型局部变量进栈0x24fload_2第三个float型局部变量进栈0x25fload_3第四个float型局部变量进栈0x26dload_0第一个double型局部变量进栈0x27dload_1第二个double型局部变量进栈0x28dload_2第三个double型局部变量进栈0x29load_3第四个double型局部变量进栈0x2Aaload_0指令格式:aload_0 指令的行为类似于aload指令index为0的情况。0x2Baload_1同上0x2Caload_2同上0x2Daload_3同上0x2Eiaload指定的int型数组的指定下标处的值进栈0x2Flaload指定的long型数组的指定下标处的值进栈0x30faload指定的float型数组的指定下标处的值进栈0x31daload指定的double型数组的指定下标处的值进栈0x32aaload指令格式:aaload 功能描述:栈顶的数组下标(index)、数组引用(arrayref)出栈,并根据这两个数值取出对应的数组元素值(value)进栈。抛出异常:如果arrayref的值为null,会抛出 ullPointerException。如果index造成数组越界,会抛出 rrayIndexOutOfBoundsException。0x33baload指定的boolean或byte型数组的指定下标处的值进栈0x34caload指定的char型数组的指定下标处的值进栈0x35saload指定的short型数组的指定下标处的值进栈0x36istore将栈顶int型数值存入指定的局部变量0x37lstore将栈顶long型数值存入指定的局部变量0x38fstore将栈顶float型数值存入指定的局部变量0x39dstore将栈顶double型数值存入指定的局部变量0x3Aastore指令格式:astore index,功能描述:将栈顶数值(objectref)存入当前frame的局部变量数组中指定下标 ndex 处的变量中,栈顶数值出栈。0x3Bistore_0将栈顶int型数值存入第一个局部变量0x3Cistore_1将栈顶int型数值存入第二个局部变量0x3Distore_2将栈顶int型数值存入第三个局部变量0x3Eistore_3将栈顶int型数值存入第四个局部变量0x3Flstore_0将栈顶long型数值存入第一个局部变量0x40lstore_1将栈顶long型数值存入第二个局部变量0x41lstore_2将栈顶long型数值存入第三个局部变量0x42lstore_3将栈顶long型数值存入第四个局部变量0x43fstore_0将栈顶float型数值存入第一个局部变量0x44fstore_1将栈顶float型数值存入第二个局部变量0x45fstore_2将栈顶float型数值存入第三个局部变量0x46fstore_3将栈顶float型数值存入第四个局部变量0x47dstore_0将栈顶double型数值存入第一个局部变量0x48dstore_1将栈顶double型数值存入第二个局部变量0x49dstore_2将栈顶double型数值存入第三个局部变量0x4Adstore_3将栈顶double型数值存入第四个局部变量0x4Bastore_0指令格式:astore_0 能描述: 该指令的行为类似于astore指令index为0的情况。0x4Castore_1同上0x4Dastore_2同上0x4Eastore_3同上0x4Fiastore将栈顶int型数值存入指定数组的指定下标处0x50lastore将栈顶long型数值存入指定数组的指定下标处0x51fastore将栈顶float型数值存入指定数组的指定下标处0x52dastore将栈顶double型数值存入指定数组的指定下标处0x53aastore指令格式:aastore,功能描述: 根据栈顶的引用型数值(value)、数组下标(index)、数组引用(arrayref)出栈,将数值存入对应的数组元素中。抛出异常: 如果value的类型和arrayref所引用的数组的元素类型不兼容,会抛出抛出ArrayStoreException。如果index造成数组越界,会抛出ArrayIndexOutOfBoundsException。如果arrayref值为null,会抛出NullPointerException。0x54bastore将栈顶boolean或byte型数值存入指定数组的指定下标处0x55castore将栈顶char型数值存入指定数组的指定下标处0x56sastore将栈顶short型数值存入指定数组的指定下标处0x57pop栈顶数值出栈 (该栈顶数值不能是long或double型)0x58pop2栈顶的一个(如果是long、double型的)或两个(其它类型的)数值出栈0x59dup复制栈顶数值,并且复制值进栈0x5Adup_x1复制栈顶数值,并且复制值进栈2次0x5Bdup_x2复制栈顶数值,并且复制值进栈2次或3次0x5Cdup2复制栈顶一个(long、double型的)或两个(其它类型的)数值,并且复制值进栈0x5Ddup2_x10x5Edup2_x20x5Fswap栈顶的两个数值互换(要求栈顶的两个数值不能是long或double型的)0x60iadd栈顶两int型数值相加,并且结果进栈0x61ladd栈顶两long型数值相加,并且结果进栈0x62fadd栈顶两float型数值相加,并且结果进栈0x63dadd栈顶两double型数值相加,并且结果进栈0x64isub栈顶两int型数值相减,并且结果进栈0x65lsub栈顶两long型数值相减,并且结果进栈0x66fsub栈顶两float型数值相减,并且结果进栈0x67dsub栈顶两double型数值相减,并且结果进栈0x68imul栈顶两int型数值相乘,并且结果进栈0x69lmul栈顶两long型数值相乘,并且结果进栈0x6Afmul栈顶两float型数值相乘,并且结果进栈0x6Bdmul栈顶两double型数值相乘,并且结果进栈0x6Cip栈顶两int型数值相除,并且结果进栈0x6Dlp栈顶两long型数值相除,并且结果进栈0x6Efp栈顶两float型数值相除,并且结果进栈0x6Fdp栈顶两double型数值相除,并且结果进栈0x70irem栈顶两int型数值作取模运算,并且结果进栈0x71lrem栈顶两long型数值作取模运算,并且结果进栈0x72frem栈顶两float型数值作取模运算,并且结果进栈0x73drem栈顶两double型数值作取模运算,并且结果进栈0x74ineg栈顶int型数值取负,并且结果进栈0x75lneg栈顶long型数值取负,并且结果进栈0x76fneg栈顶float型数值取负,并且结果进栈0x77dneg栈顶double型数值取负,并且结果进栈0x78ishlint型数值左移指定位数,并且结果进栈0x79lshllong型数值左移指定位数,并且结果进栈0x7Aishrint型数值带符号右移指定位数,并且结果进栈0x7Blshrlong型数值带符号右移指定位数,并且结果进栈0x7Ciushrint型数值无符号右移指定位数,并且结果进栈0x7Dlushrlong型数值无符号右移指定位数,并且结果进栈0x7Eiand栈顶两int型数值按位与,并且结果进栈0x7Fland栈顶两long型数值按位与,并且结果进栈0x80ior栈顶两int型数值按位或,并且结果进栈0x81lor栈顶两long型数值按位或,并且结果进栈0x82ixor栈顶两int型数值按位异或,并且结果进栈0x83lxor栈顶两long型数值按位异或,并且结果进栈0x84iinc指定int型变量增加指定值0x85i2l栈顶int值强转long值,并且结果进栈0x86i2f栈顶int值强转float值,并且结果进栈0x87i2d栈顶int值强转double值,并且结果进栈0x88l2i栈顶long值强转int值,并且结果进栈0x89l2f栈顶long值强转float值,并且结果进栈0x8Al2d栈顶long值强转double值,并且结果进栈0x8Bf2i栈顶float值强转int值,并且结果进栈0x8Cf2l栈顶float值强转long值,并且结果进栈0x8Df2d栈顶float值强转double值,并且结果进栈0x8Ed2i栈顶double值强转int值,并且结果进栈0x8Fd2l栈顶double值强转long值,并且结果进栈0x90d2f栈顶double值强转float值,并且结果进栈0x91i2b栈顶int值强转byte值,并且结果进栈0x92i2c栈顶int值强转char值,并且结果进栈0x93i2s栈顶int值强转short值,并且结果进栈0x94lcmp比较栈顶两long型数值大小,并且结果(1,0,-1)进栈0x95fcmpl比较栈顶两float型数值大小,并且结果(1,0,-1)进栈;当其中一个数值为NaN时, -1进栈0x96fcmpg比较栈顶两float型数值大小,并且结果(1,0,-1)进栈;当其中一个数值为NaN时,1进栈0x97dcmpl比较栈顶两double型数值大小,并且结果(1,0,-1)进栈;当其中一个数值为NaN时,-1进栈0x98dcmpg比较栈顶两double型数值大小,并且结果(1,0,-1)进栈;当其中一个数值为NaN时,1进栈0x99ifeq当栈顶int型数值等于0时跳转0x9Aifne当栈顶int型数值不等于0时跳转0x9Biflt当栈顶int型数值小于0时跳转0x9Cifge当栈顶int型数值大于等于0时跳转0x9Difgt当栈顶int型数值大于0时跳转0x9Eifle当栈顶int型数值小于等于0时跳转0x9Fif_icmpeq比较栈顶两int型数值大小,当结果等于0时跳转0xA0if_icmpne比较栈顶两int型数值大小,当结果不等于0时跳转0xA1if_icmplt比较栈顶两int型数值大小,当结果小于0时跳转0xA2if_icmpge比较栈顶两int型数值大小,当结果大于等于0时跳转0xA3if_icmpgt比较栈顶两int型数值大小,当结果大于0时跳转0xA4if_icmple比较栈顶两int型数值大小,当结果小于等于0时跳转0xA5if_acmpeq比较栈顶两引用型数值,当结果相等时跳转0xA6if_acmpne比较栈顶两引用型数值,当结果不相等时跳转0xA7goto无条件跳转0xA8jsr跳转至指定16位offset位置,并将jsr下一条指令地址压入栈顶0xA9ret返回至局部变量指定的index的指令位置(通常与jsr、jsr_w联合使用)0xAAtableswitch用于switch条件跳转,case值连续(可变长度指令)0xABlookupswitch用于switch条件跳转,case值不连续(可变长度指令)0xACireturn当前方法返回int0xADlreturn当前方法返回long0xAEfreturn当前方法返回float0xAFdreturn当前方法返回double0xB0areturn指令格式: areturn。功能描述: 从方法中返回一个对象的引用。抛出异常: 如果当前方法是synchronized方法,并且当前线程不是改方法的锁的拥有者,会抛出IllegalMonitorStateException。0xB1return当前方法返回void0xB2getstatic获取指定类的静态域,并将其值压入栈顶0xB3putstatic为指定的类的静态域赋值0xB4getfield获取指定类的实例域,并将其值压入栈顶0xB5putfield为指定的类的实例域赋值0xB6invokevirtual调用实例方法0xB7invokespecial调用超类构造方法、实例初始化方法、私有方法0xB8invokestatic调用静态方法0xb9invokeinterface调用接口方法0xBA—因为历史原因,该码点为未使用的保留码点0xBBnew建一个对象,并且其引用进栈0xBCnewarray创建一个基本类型数组,并且其引用进栈0xBDanewarray指令格式:anewarray index1 index2,功能描述: 栈顶数值(count)作为数组长度,创建一个引用 型数组。栈顶数值出栈,数组引用进栈。抛出异常: 如果count小于0,会抛出NegativeArraySizeException0xBEarraylength指令格式:arraylength,功能描述:栈顶的数组引用(arrayref)出栈,该数组的长度进栈。抛出异常:如果arrayref的值为null,会抛出NullPointerException。0xBFathrow指令格式:athrow,功能描述: 将栈顶的数值作为异常或错误抛出。出异常:如果栈顶数值为null,则使用NullPointerException代替栈顶数值抛出。如果方法是的,则有可能抛出IllegalMonitorStateException。0xC0checkcast类型转换检查,如果该检查未通过将会抛出ClassCastException异常0xc1instanceof检查对象是否是指定的类的实例。如果是,1进栈;否则,0进栈0xC2monitorenter获得对象锁0xC3monitorexit释放对象锁0xC4wide用于修改其他指令的行为0xC5multianewarray创建指定类型和维度的多维数组(执行该指令时,栈中必须包含各维度的长度值),并且其引用值进栈0xC6ifnull为null时跳转0xC7ifnonnull不为null时跳转0xC8goto_w无条件跳转(宽索引)0xC9jsr_w跳转至指定32位offset位置,并且jsr_w下一条指令地址进栈0xCAbreakpoint0xFEimpdep10xFFmpdep2

更多关于JVM常用指令请查看下面的相关链接

以上就上有关JVM常用指令速查表的全部内容,学步园全面介绍编程技术、操作系统、数据库、web前端技术等内容。

抱歉!评论已关闭.