jvm class文件操作码

出栈/装入局部变量表指令

类型常数指令范围
int(boolean,byte,char,short)iconst[-1,5]
 bipush[-128,127]
 sipush[-32768,32767]
 ldcany int value
longlconst0,1
 ldcany long value
floatfconst0,1,2
 ldcany double value
doubledconst0,1
 ldcany double value
referenceaconstnull
 ldcString literal,Class literal

算术指令

类型转换指令

① 宽化类型转换

注意 : 在字节码文件中,  没有byte, char, short, 这些统统用int表示, 因为局部变量表中, 每个槽位占用4个字节, 即使他们占用的内存空间小于4字节, 但是还会占用一个槽位

② 窄化类型转换(强制类型转换)

 

对象的创建与访问指令

① 对象创建指令

② 字段访问指令

③ 数组操作指令

④  类型检查指令

方法调用指令

② 方法返回指令

操作数栈管理指令

控制转移指令

① 比较指令

② 条件跳转指令(不包含int类型, 只有 float double long)

③比较条件跳转指令(针对int类型)

④ 多条件分支跳转指令

⑤ 无条件跳转指令

异常处理指令

① 抛出异常指令

② 异常处理与异常表

如果从0-22出现异常, 且被FileNotFoundException捕捉到,就会跳转到25位置  下一个同理

同步控制指令

① 方法级的同步

方法级别的同步不能再字节码文件上体现,  同没有加synchronized的方法字节码文件完全相同,  但是可以在方法描述部分体现

② 方法内部指定指令序列的同步

monitorenter : 获取同步锁, 并将其他想要获取锁的线程阻塞

monitorexit : 释放同步锁

从22-26可以看出, 这段字节码是对异常的处理,  查看一下异常表

从表中可以看出,  7-19是同步代码快中的字节码指令,  说明, 如果在同步代码块中出现任何异常, 那么字节码指令就会跳转到22行,22-26即是释放锁的字节码. 说明即使发生异常, 也会释放锁

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值