指令 | 释义 |
---|---|
aconst_null | 将 null 对象引用压如栈 |
iconst_1 | 将 int 类型常量 1 压入栈 |
iconst_m1 | 将 int 类型常量 -1 压入栈 |
lconst_1 | 将 long 类型常量 1 压入栈 |
fconst_1 | 将 float 类型常量 1 压入栈 |
dconst_1 | 将 double 类型常量压入栈 |
bipush | 将一个 8 位带符号整数压入栈中 |
sipush | 将一个 16 位带符号整数压入栈中 |
idc | 把常量池中的项压入栈 |
idc_w | 把常量池中的项压入栈(使用宽索引) |
idc2_w | 把常量池中 long 类型或者 double 类型的项压入栈(使用款索引) |
指令 | 释义 |
---|---|
iload | 从局部变量中装载 int 类型值 |
lload | 从局部变量中装载 long 类型值 |
fload | 从局部变量中装载 float 类型值 |
dload | 从局部变量中装载 double 类型值 |
aload | 从局部变量中装载引用类型的值(refernce) |
iload_0 | 从局部变量 0 中装载 int 类型值 |
lload_0 | 从局部变量 0 中装载 long 类型值 |
fload_0 | 从局部变量 0 中装载 float 类型值 |
dload_0 | 从局部变量 0 中装载 double 类型值 |
aload_0 | 从局部变量 0 中装载引用类型值 |
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 类型值存入局部变量 0 |
lstore_1 | 将 long 类型值存入局部变量 1 |
fstore_0 | 将 float 类型值存入局部变量 0 |
dstore_0 | 将 double 类型值存入局部变量 0 |
astore_3 | 将引用类型或 returnAddress 类型值存入局部变量 3 |
astore | 将 int 类型值存入数组中 |
lastore | 将 long 类型值存入数组中 |
fastore | 将 float 类型值存入数组中 |
dastore | 将 double 类型值存入数组中 |
aastore | 将引用类型值存入数组中 |
bastore | 将 byte 类型或者 boolean 类型值存入数组中 |
castore | 将 char 类型值存入数组中 |
sastore | 将 short 类型值存入数组中 |
指令 | 释义 |
---|---|
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 | 抛出异常或错误 |
指令 | 释义 |
---|---|
jsr | 跳转到子例程 |
jsr_w | 跳转到子例程 (宽索引) |
rct | 从子例程返回 |
指令 | 释义 |
---|---|
invokcvirtual | 运行时按照对象的类来调用实例方法 |
invokespecial | 根据编译时类型来调用实例方法 ==> 调用超类构造方法、实例初始化方法、私有方法 |
invokestatic | 调用类 (静态) 方法 |
invokcinterface | 调用接口方法 |
指令 | 释义 |
---|---|
ireturn | 从方法中返回 int 类型的数据 |
lreturn | 从方法中返回 long 类型的数据 |
freturn | 从方法中返回 float 类型的数据 |
dreturn | 从方法中返回 double 类型的数据 |
areturn | 从方法中返回引用类型的数据 |
return | 从方法中返回, 返回值为 void |
指令 | 释义 |
---|---|
monitorenter | 进入并获取对象监视器 (获取对象锁) |
monitorexit | 释放并退出对象监视器 (释放对象锁) |
指令 | 释义 |
---|---|
变量到操作数栈 | 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, fcmpl, fcmpg, dcmpl, dcmpg |
复合条件转移 | tableswitch, lookupswitch |
无条件转移 | goto, goto_w, jsr, jsr_w, ret |
调度对象的实便方法 | invokevirtual |
调用由接口实现的方法 | invokeinterface |
调用需要特殊处理的实例方法:invokespecial | |
调用命名类中的静态方法 | invokestatic |
方法返回 | ireturn, lreturn, freturn, dreturn, areturn, return |
异常 | athrow |
finally 关键字的实现使用 | jsr, jsr_w, ret |