内容大部分参考粘贴

  1. 《 Java 虚拟机规范 Java SE 8 版》
  2. Oracle 官网的虚拟机规范

aaload

操作
格式
结构
操作数栈
描述
链接时异常
运行时异常
注意

aastore

操作
格式
结构
操作数栈
描述
链接时异常
运行时异常
注意

aconst_null

操作
格式
结构
操作数栈
描述
链接时异常
运行时异常
注意

aload,aload_

操作
格式
结构
操作数栈
描述
链接时异常
运行时异常
注意

anewarray

操作
格式
结构
操作数栈
描述
链接时异常
运行时异常
注意

areturn

操作
格式
结构
操作数栈
描述
链接时异常
运行时异常
注意

arraylength

操作
格式
结构
操作数栈
描述
链接时异常
运行时异常
注意

astore,astore_

操作
格式
结构
操作数栈
描述
链接时异常
运行时异常
注意

athrow

操作
格式
结构
操作数栈
描述
链接时异常
运行时异常
注意

baload

操作
格式
结构
操作数栈
描述
链接时异常
运行时异常
注意

bastore

操作
格式
结构
操作数栈
描述
链接时异常
运行时异常
注意

bipush

操作
格式
结构
操作数栈
描述
链接时异常
运行时异常
注意

caload

操作
格式
结构
操作数栈
描述
链接时异常
运行时异常
注意

castore

操作
格式
结构
操作数栈
描述
链接时异常
运行时异常
注意

checkcast

操作
格式
结构
操作数栈
描述
链接时异常
运行时异常
注意

d2f, d2i, d2l

操作
格式
结构
操作数栈
描述
链接时异常
运行时异常
注意

dadd

操作
格式
结构
操作数栈
描述
链接时异常
运行时异常
注意

daload

操作
格式
结构
操作数栈
描述
链接时异常
运行时异常
注意

dastore

操作
格式
结构
操作数栈
描述
链接时异常
运行时异常
注意

dcmp

操作
格式
结构
操作数栈
描述
链接时异常
运行时异常
注意

dconst_

操作
格式
结构
操作数栈
描述
链接时异常
运行时异常
注意

ddiv

操作
格式
结构
操作数栈
描述
链接时异常
运行时异常
注意

dload, dload_

操作
格式
结构
操作数栈
描述
链接时异常
运行时异常
注意

dmul

操作
格式
结构
操作数栈
描述
链接时异常
运行时异常
注意

dneg

操作
格式
结构
操作数栈
描述
链接时异常
运行时异常
注意

drem

操作
格式
结构
操作数栈
描述
链接时异常
运行时异常
注意

dreturn

操作
格式
结构
操作数栈
描述
链接时异常
运行时异常
注意

dstore, dstore_

操作
格式
结构
操作数栈
描述
链接时异常
运行时异常
注意

dsub

操作
格式
结构
操作数栈
描述
链接时异常
运行时异常
注意

dup

操作 复制操作数栈栈顶的值,并插入到栈顶
格式 dup
结构 dup = 89 ( 0x59 )
操作数栈 … , value →
… , value , value
描述 复制操作数栈栈顶的值,并将此值入栈到操作数栈顶

dup_x1

操作
格式
结构
操作数栈
描述
链接时异常
运行时异常
注意

dup_x2

操作
格式
结构
操作数栈
描述
链接时异常
运行时异常
注意

dup2

dup2_x1

dup2_x2

f2d, f2i, f2l

fadd

faload

fastore

fcmp

fconst_

fdiv

fload, fload_

fmul

fneg

frem

freturn

fstore, fstore_

fsub

getfield

getstatic

goto, goto_w

i2b, i2c, i2d, i2f, i2l, i2s

iadd

iaload

iand

iastore

iconst_

idiv

if_acmp

if_icmp

if

ifnonnull, ifnull

iinc

iload, iload_

imul

ineg

instanceof

invokedynamic

invokeinterface

invokespecial

操作 调用实例方法,专门用来调用父类方法、私有方法和实例初始化方法
20201120171056.png
格式 invokespecial
indexbyte1
indexbyte2
结构 invokespecial=183 ( 0xb87 )
操作数栈 …. , objectref , [ arg1 , [ arg2…]]→
….
描述 无符号数 indexbyte1 和 indexbyte2 用于构建一个指向当前类的运行时常量池的索引值,构建方式为 ( indexbyte<<8 | indexbyte2 ),该索引所指向的运行时常量池应当是个对某个方法或接口方法的符号引用,其中包含了方法的名称和描述符,以及指向该方法所在类或接口的符号引用。这个方法的符号引用已被解析过
如果调用的方法时 protected 的,并且这个方法时当前类的父类成员,而这个方法又没有在同一个运行时包中声明过,那么 objectref 所指向的对象的类型必须为当前类或者当前类的子类
在下面所有的条件都成立的前提下,将当前类的直接超类记为 C:
- 解析出来的方法不是实例初始化方法。
- 如果符号引用指向的是类而不是接口,那么所指的类是当前类的超类。
- class 文件的 ACC_SUPER 标志是真。


否则,就把符号引用所指的类或接口记为 C。
虚拟机将按下面的规则查找实际执行的方法:
- 如果 C 中包含了名称和描述符都与要调用的实例方法一致的方法,那么这个方法就会被调用,查找过程终止
- 否则,如果 C 是类,并且有父类,那么查找过程将按顺序递归搜索 C 的直接父类,以及父类的父类、知道搜索到名称和描述符都与要调用的实例方法一致的方法,或再也没有父类是为止,如果找到了相符的方法,那么这个方法就会被调用
链接时异常
运行时异常
注意

invokestatic

操作 调用类(静态)方法
格式 invokestatic
indexbyte1
indexbyte2
结构 invokestatic=184 ( 0xb8 )
操作数栈
描述
链接时异常
运行时异常
注意

invokevirtual

ior, irem

ireturn

ishl, ishr, iushr

istore, istore_

isub, ixor

l2d, l2f, l2i

ladd

laload

land

lastore

lcmp

lconst_

ldc, ldc_w, ldc2_w

ldiv

lload, lload_

lmul

lneg

lookupswitch

lor, lrem

lreturn

lshl, lshr, lushr

lstore, lstore_

lsub, lxor

monitorenter, monitorexit

multianewarray

new

操作 创建一个对象
格式 new
indexbyte1
indexbyte2
结构 new = 187 (0xbb)
操作数栈 …→
… , objectref
描述 无符号数 indexbyte1indexbyte2 用于构建一个指向当前类的运行时常量池的索引值,构建方式 (indexbyte1<<8) | indexbyte2,该索引所指向的银杏是常量池应当是一个类或接口的符号引用,这个类或接口类型应当是已被解析过的,并且最终解析结果为某个具体的类。一个以此为类的新实例将会被分配在 GC 堆中,并且它所有的实例变量都会初始化为相应类型的初始值。一个代表该对象实例的 reference 类型数据 objectref 将入栈到操作数栈中
一个已成功解析但是未初始化的类,在这时将会进行初始化
链接时异常 在类、接口或数组的符号解析阶段,可能抛出‘类与接口解析’所描述的异常
否则,如果类、接口或者数组的符号引用最终被解析为一个接口或抽象类,new 执行将抛出 InstantiationError
运行时异常 如果 new 执行触发了类的初始化,那么 new 指令可能会抛出任意在 JLS 中所描述的异常
注意 new 执行执行后并没有完成一个对象实例创建的全部过程,只有执行和完成了实例初始化方法后,实例才算创建完全

newarray

操作
格式
结构
操作数栈
描述
链接时异常
运行时异常
注意

nop

pop, pop2

putfield

putstatic

return

saload

sastore

sipush

swap

tableswitch

wide