java架构师培训-jvm可以对java的原生锁做哪些优化

69 篇文章 0 订阅

JVM对Java的原生锁做了哪些优化?在Java之前,Monitor的实现完全依赖底层操作系统的互斥锁来实现,也就是我们刚才在问题二中所闻述的获取/释放锁的逻辑。

java架构师培训

由于Java级线程与操作系统的本机线程具有映射关系,因此,如果要阻止或唤醒线程,则需要操作系统的帮助,这需要从用户模式切换到内核模式以进行操作。执行。这种切换非常昂贵,需要大量的处理器时间,并且在现代JDK中已经进行了很多优化。一种优化方法是使用旋转锁,即让线程旋转并等待一段时间,然后再阻塞线程。可能是在等待期间其他线程已被解锁。此时,不再允许线程执行阻止操作,这避免了用户模式。切换到内核模式。

再让线程执行阻塞操作,避免了用户态到内核态的切换。

现代JDK中还提供了三种不同的Monitor实现,也就是三种不同的锁:

·偏向锁(BiasedLocking)

·轻量级锁

·重量级锁

这三种锁使得JDK得以优化Synchronized的运行,当JM检测到不同的竞争状况时,会自动切换到适合的锁实现,这就是锁的升级、降级。

·当没有竞争出现时,默认会使用偏向锁。

JVM将使用CAS操作在对象标头的MarkWord部分中设置线程ID,以指示该对象偏向当前线程,因此不涉及真正的互斥锁,因为在许多应用程序场景中,大多数对象都是生命周期中最多的时间将被线程锁定,使用偏斜的锁可以减少无竞争的开销。

·如果有另一线程试图锁定某个被偏斜过的对象,JM就撤销偏斜锁,切换到轻量级锁实现。

·轻量级锁依赖CAS操作MarkWord来试图获取锁,如果重试成功,就使用普通的轻量级锁;否则,进一步升级为重量级锁。

推荐阅读:java架构师培训:java最佳测试框架JBehave的基本介绍

如果你想了解更多关于java架构师的专业知识,可以加入JAVA架构师交流群:1160405674,里面都是同行,有资源分享包括但不限于(分布式架构、高可扩展、高性能、高并 发、Jvm性能调优、Spring,MyBatis,Nginx源码分析,Redis,ActiveMQ、Mycat、Netty、Kafka、Mysql 、Zookeeper、Tomcat、Docker、Dubbo、Nginx)。欢迎一到五年的工程师加入,合理利用自己每一分每一秒的时间来学习提升自己,不要再用"没有时间“来掩饰自己思想上的懒惰!趁年轻,使劲拼,给未来的自己一个交代!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值