首页 行业资讯 宠物日常 宠物养护 宠物健康 宠物故事

Java synchronized是否有对应的字节码指令实现

发布网友

我来回答

1个回答

热心网友

synchronized的实现分两种,一种是synchronized方法,一种是synchronized块,
两种方法稍有不同,但是核心还是一样的。

synchronized方法就像R大的笔记中提到的,
并没有生成对应的monitorenter、monitorexit字节码,
而是通过方法的access_flags字段中的ACC_SYNCHRONIZED标志来识别,
带有ACC_SYNCHRONIZED标志的方法在HotSpot中会通过method_entry_point_zerolocals_synchronized来触发,
在实际执行方法字节码之前会根据UseHeavyMonitors和UseBiasedLocking参数来确定
先用哪种锁,然后在方法返回时再做相关的解锁操作(体现在return字节码的汇编代码中)。

synchronized块有对应的monitorenter、monitorexit字节码,
monitorenter的汇编代码有一部分是跟method_entry_point_zerolocals_synchronized相同的,同样monitorexit的汇编代码有一部分也跟return的汇编代码相同。

声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com