1.字节码与数据类型
对于大部分与数据类型相关的字节码指令,它们的操作码助记符中都有特殊的字符来表明专门为哪种数据类型服务;
b | s | i | l | f | d | c | a |
byte | short | int | long | float | double | char | reference |
大部分指令不支持byte、short、char,没有指令支持boolean,编译器会将这4种类型在编译期或运行期转为int类型
2.加载和存储指令
如:iload_0,istore_1,iconst_1,bipush,sipush,ldc_w,ldc2_w
3.运算指令
如:iadd,isub,imul,idiv,irem
4.类型转换指令
宽化类型转换:直接支持
窄化类型转化:i2b,i2s,i2c
5.对象创建和访问指令
如:new,newarray,anewarray,mutilanewarray;
getfield,putfield,getstatic,putstatic;
bastore,sastore,iastore,aastore;
arraylength,instanceof,checkcast
6.操作数管理指令
如:pop,dup,swap
7.控制转移指令
如:ifeq,ifne,ifnull,tableswitch,lookupswitch,goto,jsr,ret
8.方法调用和返回指令
如:invokevirtual,invokeinterface,invokespecial,invokestatic,invokedynamic;
return,ireturn,lreturn,areturn
9.异常处理指令
如:athrow
10.同步指令
如:monitorenter,monitorexit