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
本文深入解析Java字节码指令集,涵盖数据类型、加载存储、运算、类型转换、对象创建、操作数管理、控制转移、方法调用、异常处理及同步指令。通过具体指令示例,如iload_0、iadd、new、invokevirtual等,阐述了字节码在Java虚拟机执行过程中的关键作用。
9939

被折叠的 条评论
为什么被折叠?



