锁的优化机制了解嘛?请进!
点个关注,必回关
文章目录
- 自旋锁:
- 自适应锁:
- 锁消除:
- 锁粗化:
- 偏向锁:
- 轻量级锁:
从JDK1.6版本之后,synchronized本身也在不断优化锁的机制,有些情况下他并不会是一个很重量
级的锁了。优化机制包括 自适应锁
、 自旋锁
、 锁消除
、 锁粗化
、 轻量级锁
和 偏向锁
。
锁的状态从低到高依次为 无锁->偏向锁->轻量级锁->重量级锁,升级的过程就是从低到高,降级在
一定条件也是有可能发生的。
自旋锁:
由于大部分时候,锁被占用的时间很短,共享变量的锁定时间也很短,所有没有必要挂起
线程,用户态和内核态的来回上下文切换严重影响性能。自旋的概念就是让线程执行一个忙循环,
可以理解为就是啥也不干,防止从用户态转入内核态,自旋锁可以通过设置-XX:+UseSpining来开
启,自旋的默认次数是10次,可以使用-XX:PreBlockSpin设置。
自适应锁:
自适应锁就是自适应的自旋锁,自旋的时间不是固定时间,而是由前一次在同一个锁上
的自旋时间和锁的持有者状态来决定。
锁消除:
锁消除指的是JVM检测到一些同步的代码块,完全不存在数据竞争的场景,也就是不需要
加锁,就会进行锁消除。
锁粗化:
锁粗化指的是有很多操作都是对同一个对象进行加锁,就会把锁的同步范围扩展到整个操
作序列之外。
阿里内部资料
偏向锁:
当线程访问同步块获取锁时,会在对象头和栈帧中的锁记录里存储偏向锁的线程ID,之后
这个线程再次进入同步块时都不需要CAS来加锁和解锁了,偏向锁会永远偏向第一个获得锁的线
程,如果后续没有其他线程获得过这个锁,持有锁的线程就永远不需要进行同步,反之,当有其他
线程竞争偏向锁时,持有偏向锁的线程就会释放偏向锁。可以用过设置-XX:+UseBiasedLocking开
启偏向锁。
轻量级锁:
JVM的对象的对象头中包含有一些锁的标志位,代码进入同步块的时候,JVM将会使用
CAS方式来尝试获取锁,如果更新成功则会把对象头中的状态位标记为轻量级锁,如果更新失败,
当前线程就尝试自旋来获得锁。
整个锁升级的过程非常复杂,我尽力去除一些无用的环节,简单来描述整个升级的机制。
简单点说,偏向锁就是通过对象头的偏向线程ID来对比,甚至都不需要CAS了,而轻量级锁主要就
是通过CAS修改对象头锁记录和自旋来实现,重量级锁则是除了拥有锁的线程其他全部阻塞。
谢谢观看
锁的优化机制了解嘛?请进!相关推荐
- 常见的锁策略、synchronized中的锁优化机制
一.常见的锁策略 锁策略,和普通程序猿基本没啥关系,和 "实现锁" 的人才有关系的 这里所提到的锁策略,和 Java 本身没关系,适用于所有和 "锁" 相关的情 ...
- 并发编程之 锁的优化有哪些
前言 在 JDK 1.6 之前,synchronized 性能令人担忧,但是 1.6 之后,JVM 团队针对 synchronized 做了很多的优化,让 synchroized 在性能层面相比较 R ...
- Java面试题之:乐观锁、悲观锁与自旋锁及其相关锁的优化(万字知识点详解)
Java面试题之:乐观锁.悲观锁与自旋锁及其锁的优化 一.乐观锁 二.悲观锁 三.自旋锁 ①自旋锁的优缺点 ②自旋锁时间阈值(1.6 引入了适应性自旋锁) ③自旋锁的开启 四.Synchronized ...
- 突破模糊定性分析,批归一化和权重衰减的球面优化机制
本文内容整理自 PaperWeekly 和 biendata 在 B 站组织的直播回顾,点击文末阅读原文即可跳转至 B 站收看本次分享完整视频录像,如需嘉宾课件,请在 PaperWeekly 公众号回 ...
- mysql 事务 注意 优化_MySQL入门详解——事务、锁、优化
MySQL事务 MySQL 事务主要用于处理操作量大,复杂度高的数据.比如说,在一个商城系统中,用户执行购买操作,那么用户订单中应该加一条,库存要减一条,如果这两步由于意外只进行了其中一步那么就会发生 ...
- aqs clh java_Java并发编程:AQS对CLH锁的优化
自旋锁适用于锁占用时间短,即锁保护临界区很小的情景AQS的自旋锁详解>.它需要保证各缓存数据的一致性,这可能会导致性能问题.因为在多处理器机器上每个线程对应的处理器都对同一个变量进行读写,而每次 ...
- 第二季:5公平锁/非公平锁/可重入锁/递归锁/自旋锁谈谈你的理解?请手写一个自旋锁【Java面试题】
第二季:5值传递和引用传递[Java面试题] 前言 推荐 值传递 说明 题目 24 TransferValue醒脑小练习 第二季:5公平锁/非公平锁/可重入锁/递归锁/自旋锁谈谈你的理解?请手写一个自 ...
- mysql5.7官网直译锁操作优化--并发添加,元数据锁,外部闭锁
8.11.3 Concurrent Inserts 并发插入 MyISAM存储引擎支持并发插入从而来减少对读写对给出表的竞争:如果一张MyISAM表的数据文件没有漏洞存在(也就是在表中删除了中间的行) ...
- 深度学习框架的内存优化机制
深度学习框架的内存优化机制 https://www.cnblogs.com/DicksonJYL/p/9576896.html 这篇博文简单介绍下深度学习框架的内存优化方式,主要参考资料1,也就是MX ...
最新文章
- 2021年大数据常用语言Scala(十三):基础语法学习 函数 重点掌握
- SpringSecurity权限表达式
- Floodlight 处理交换机增加/移除过程
- scikit-learn工具包使用建议(转)
- 如何将手机投屏到电脑_手机如何投屏到电脑上?详细教程看这里,手机投屏
- 比拼 Kafka, 大数据分析新秀Pulsar到底好在哪
- 电影'社交网络'获金球奖最佳影片,最佳编剧,最佳导演,最佳配乐奖
- python旋转校正原理_Python+OpenCV实现旋转文本校正方式
- matlab 多项式排序,MATLAB多项式
- VS Code格式化代码插件Beautify
- UFS和EMMC的区别--原理学习
- 什么是「设计模式」?
- RK3399 Android7.1修改系统默认壁纸
- springboot毕设项目流动人口信息管理系统9i8kh(java+VUE+Mybatis+Maven+Mysql)
- 视觉SLAM十四讲:运动方程
- 下载更多动态壁纸为莫哈韦沙漠,或使自己的
- 高分SCI都在用 P for trend,快来看看吧
- Windows10 官方原版镜像下载途径 Label:win10解决方案
- 在css样式中隐藏元素,用JS改变的元素CSS样式,css里display :none 隐藏 block 显示
- 友善之臂NanoPC-T4 RK3399 配置 安装TensorFlow2 Pytorch
热门文章
- 垃圾分类小程序,识别和站点查询,答题,用户后台管理集一体的小程序
- Defcon China 靶场题 - 内网渗透Writeup
- Cocos2d-js cc.director介绍
- maya渲染帧拷贝删除重命名插件 tjh_copy_same_frame1.1 下载及教程
- php排版word文档试卷,用word做试卷的排版
- 街头立体画的创作过程
- com.google.guava包里面的相关简单方法
- 超炫的html5擦除效果,超炫html5效果代码(需浏览器支持)
- matlab set函数
- Android工作日志