前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >JDK的锁优化

JDK的锁优化

作者头像
十毛
发布2022-01-12 17:26:59
1860
发布2022-01-12 17:26:59
举报

JDK1.6重点提升了并发性能,HotSpot开发团队实现了各种锁优化技术,如适应性自旋锁、锁消除、锁粗化、轻量级锁和偏向锁

重量级锁

线程遇到synchronized关键词时,需要获取锁,这个时候需要使用系统调用获取互斥量,如果没有获取到则被操作系统挂起线程,因为此过程需要进行用户态转内核态,而且有可能需要切换线程,操作比较重,所以称为重量级锁。

轻量级锁

在大部分场景下,共享数据的锁定状态只会持续很短的一段时间,使用重量级锁的话,锁的获取和上下文切换的时间,可能都比共享逻辑执行时间还长,得不偿失,所以引入轻量级锁。 轻量级锁,是乐观锁的一种,如果对象上的锁被其他线程获取,则自旋等待。 如果超过一定的自旋次数后,则膨胀为重量级锁

偏向锁

在一些场景中,共享数据实际上只会被一个线程访问,使用偏向锁就只需要开始加锁的一次CAS,效率最高。如果遇到锁竞争,则膨胀为轻量级锁

疑问

  • mark word一共是32位,当标志位是00(轻量级锁)时,指向锁记录的指针位数只有30位,30位如何保存下指针呢?
  • 膨胀为重量级锁时,如何让已经拥有该对象轻量级锁获取到重量级锁,也就是内核的互斥量?
  • 偏向锁时,mark word前面保存了偏向线程ID,那么对象哈希码保存到哪里去了?
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2021.08.03 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 重量级锁
  • 轻量级锁
  • 偏向锁
  • 疑问
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档