加载和存储指令
将局部变量加载到操作栈:iload
将数值从操作栈存储到局部变量表istore
将一个常量加载到操作数栈:bipush、ldc、iconst
运算指令
加法:iadd
减法:isub
乘法:imul
除法:idiv
求余:irem
取反:ineg
位移:ishl,ishr
或:ior
与:iand
异或:ixor
局部变量自增:iinc
比较:dcmpg
类型转换指令·
虚拟机直接支持以下数值类型的宽化类型转换
int-->long,float,double
long-->float,double
float-->double
相对的窄化转换需要用到转换指令完成。
i2b:int-->byte
对象创建与访问指令
创建类实例:new
创建数组:newarray,
访问类字段和实例字段:getfield,putfield,getstatic,putstatic
把数组元素加载到操作数栈的指令:baload(byte array load)
将一个操作数栈值存储到数组元素中的指令:bastore(byte array store)
取数组长度:arraylength
检查实例类型:instanceof、checkcast
操作数栈管理指令
将操作数栈的栈顶一个或两个元素出栈:pop、pop2
复制栈顶一个或两个数值并将复制值或双份的复制值重新压入栈顶:dup
将栈最顶端的两个数值互换:swap
控制转移指令
条件分支:ifeq、iflt、ifle、ifne、ifgt、ifnull、ifnonnull、if_icmpeq
复核条件分支:tableswitch、lookupswitch
无条件分支:goto
方法调用和返回指令
invokevirtual:调用对象的实例方法
invokeinterface:调用接口方法
invokespecial:调用一些需要特殊处理的实例方法
invokestatic:调用类方法
invokedynamic:运行时动态解析出调用点限定符所引用的方法。
返回:ireturn
异常处理指令
throw:athrow,catch采用异常表来完成的。
同步指令
Java虚拟机可以支持方法级的同步和方法内部一段指令序列的同步,这两种同步结构都是使用管程Monitor来支持的。