首页 > 编程语言 >java核心技术学习笔记——synchronized底层如何实现?什么是锁的升级、降级?

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

时间:2022-12-19 11:34:54浏览次数:51  
标签:降级 java synchronized 竞争 偏斜 切换 JVM 重量级 轻量级


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

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

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

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

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

 

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

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

 

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

 

详情:

标签:降级,java,synchronized,竞争,偏斜,切换,JVM,重量级,轻量级
From: https://blog.51cto.com/u_10176086/5951824

相关文章

  • javaMail笔记
    JavaMail        javaMail是提供给开发人员在应用程序中实现邮件发送和接收功能而提供的一套表中开发类库,支持常用的邮件协议,如SMTP,POO3,IMAP,开发人员使用javaMa......
  • 【java】(二) SpringBoot 源码解析——run启动加载过程——准备环境
    1.前言深入学习springboot笔记系列,可能会有错误还请指正,互相勉励,互相学习。上一章讲了SpringApplicaiton是如何初始化的,本章讲解后续的run方法的启动过程。本章涉及......
  • Java实现基本的HTTP/HTTPS请求 - 包含协议头
    importjava.io.BufferedReader;importjava.io.IOException;importjava.io.InputStream;importjava.io.InputStreamReader;importjava.io.OutputStream;importja......
  • java.exe进程来源排查录
     解决后的一个小结:此处是一个tomcat端口,这种情况下,可以先在浏览器访问下看看效果,就可以快速定位 又发现一个简单的办法:  下面的定位过程,适用于各种场合  无意中发现有......
  • Java如何实现自定义异常
    自定义异常概述为什么需要自定义异常类:我们说了Java中不同的异常类,分别表示着某一种具体的异常情况,那么在开发中总是有些异常情况是SUN没有定义好的,此时我们根据自己......
  • Java大写字母转换成小写字母(转载)
    问题:把一个小写字母转对应的大写字母,有几种办法?解题思路1:使用语言自带的APIpublicCharactertoLowerCase(Characters){returnCharacter.toLowerCase(s);......
  • 教你用JavaScript实现推荐滑块
    案例介绍欢迎来到我的小院,我是霍大侠,恭喜你今天又要进步一点点了!我们来用JavaScript编程实战案例,做一个推荐滑块。推荐滑块展示内容,每隔3秒自动变换。案例演示运行程序后......
  • java之增强for和迭代器精选
    前言:未来这个词听上去就是美好,可是你别忘了呀,每一个我们所期待的美好未来,都必须有一个努力的现在!!!我们上一篇聊到了java之集合,这一篇我们聊一下增强for和迭代器,针对于以下......
  • Spring Cloud实践:降级、限流、滚动、灰度、AB、金丝雀的实现思路
    端口:8888,方便起见直接读取配置文件,生产环境可以读取git。application-dev.properties为全局配置。先启动配置中心,所有服务的配置(包括注册中心的地址)均从配置中心读取。consu......
  • 教你用JavaScript实现表情评级
    案例介绍欢迎来到我的小院,我是霍大侠,恭喜你今天又要进步一点点了!我们来用JavaScript编程实战案例,做一个表情评价程序。用户打星进行评价,表情会根据具体星星数量发生变化......