java核心技术学习笔记——synchronized底层如何实现?什么是锁的升级、降级?

本文详细探讨了Java中Monitor的实现进化,从Java6之前的单一操作系统互斥锁,到现代JDK中引入的偏斜锁、轻量级锁和重量级锁。介绍了锁的升级、降级机制,以及如何根据竞争状况自动选择最佳锁实现,提高并发性能。

在Java 6之前, Monitor的实现完全是依靠操作系统内部的互斥锁,因为需要进行用户态到内核态的切换,所以同步操作是一个无差别的重量级操作。

现代的(Oracle) JDK中, VM对此进行了大刀阔斧地改进,提供了三种不同的Monitol实现,也就是常说的三种不同的锁:偏斜锁(Biased Locking) 、轻量级锁和重量级锁,大大改进了其性能.

所谓锁的升级、降级,就是JVM优化synchronized运行的机制,当JVM检测到不同的竞争状况时,会自动切换到适合的锁实现,这种切换就是锁的升级、降级。

当没有竞争出现时,默认会使用偏斜锁,使用偏斜锁可以降低无竞争开销.

如果有另外的线程试图锁定某个已经被偏斜过的对象, JVM就需要撤销(revoke)偏斜锁,· 并切换到轻量级锁实现。轻量级锁依赖CAS操作Mark Word来试图获取锁,如果重试成功,就使用普通的轻量级锁;否则,进一步升级为重量级锁。

 

JVM启动时可以指定是否开启偏斜锁

偏斜锁会延缓JT预热的进程,所以很多性能测试中会显式地关闭偏斜锁,令如下: -XX:-UseBiasedLocking

 

总结: 当没有竞争时使用偏斜锁,有竞争时偏斜锁变成轻量级锁,竞争大时变成重量级锁.

 

详情:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

刘彦青-Yannis

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值