实战中,偏向锁是如何产生和升级的?
- 内容介绍
- 文章标签
- 相关推荐
本文共计1580个文字,预计阅读时间需要7分钟。
锁升级+介绍什么是偏斜锁,轻量级锁,重量级锁。分析了三者区别和使用场景。还记得到Redis章节中整数的升级操作吗?在锁中,我们同样设计有锁升级和降级操作。
锁升级- 上文我们主要介绍什么是偏向锁,轻量级锁,重量级锁。并分析了三者的区别和使用场景。还记得Redis章节中整数集中升级操作吗。在锁中我们同样是设计锁升级和降级的。上文我们也介绍了当没有竞争时偏向锁,出现竞争时就轻量级锁。
- 但是轻量级锁时cas操作和自旋等待。自旋只能适合并发少的情况,如果并发很多一个线程可能需要等待很久才能获取到锁,那么自旋期间的开销也是很巨大的,所以就很有必要升级轻量级锁。那么什么时候该升级重量级锁呢?JVM中也是设置了自旋次数的,超过一定次数就会发生升级成重量级锁
- 个人认为重点还是偏向锁升级的过程。因为偏向锁不会主动撤销,所以锁升级过程涉及批量锁撤销,批量锁偏向等场景。
- 还记得偏向锁在锁对象的markword中的存储结构吗,末尾三位是101表示偏向锁。关于Lock Record就是上面我们提到的线程栈顶的锁记录对象的指针,关于锁记录内部存储了整个锁对象的markword , 而这里我们需要注意的是EPOCH , EPOCH翻译过来是纪元的意思。我们简单理解成版本好
- 说到版本号,我们还得熟悉JVM关于偏向锁的两个属性设置
- 发生轻量级锁升级的时候就会发生偏向锁的撤销。如果JVM发现某一类锁发生锁撤销的次数大于等于
-XX:BiasedLockIngBulkRebiasThreshold=20时,就会宣布偏向锁失效。
本文共计1580个文字,预计阅读时间需要7分钟。
锁升级+介绍什么是偏斜锁,轻量级锁,重量级锁。分析了三者区别和使用场景。还记得到Redis章节中整数的升级操作吗?在锁中,我们同样设计有锁升级和降级操作。
锁升级- 上文我们主要介绍什么是偏向锁,轻量级锁,重量级锁。并分析了三者的区别和使用场景。还记得Redis章节中整数集中升级操作吗。在锁中我们同样是设计锁升级和降级的。上文我们也介绍了当没有竞争时偏向锁,出现竞争时就轻量级锁。
- 但是轻量级锁时cas操作和自旋等待。自旋只能适合并发少的情况,如果并发很多一个线程可能需要等待很久才能获取到锁,那么自旋期间的开销也是很巨大的,所以就很有必要升级轻量级锁。那么什么时候该升级重量级锁呢?JVM中也是设置了自旋次数的,超过一定次数就会发生升级成重量级锁
- 个人认为重点还是偏向锁升级的过程。因为偏向锁不会主动撤销,所以锁升级过程涉及批量锁撤销,批量锁偏向等场景。
- 还记得偏向锁在锁对象的markword中的存储结构吗,末尾三位是101表示偏向锁。关于Lock Record就是上面我们提到的线程栈顶的锁记录对象的指针,关于锁记录内部存储了整个锁对象的markword , 而这里我们需要注意的是EPOCH , EPOCH翻译过来是纪元的意思。我们简单理解成版本好
- 说到版本号,我们还得熟悉JVM关于偏向锁的两个属性设置
- 发生轻量级锁升级的时候就会发生偏向锁的撤销。如果JVM发现某一类锁发生锁撤销的次数大于等于
-XX:BiasedLockIngBulkRebiasThreshold=20时,就会宣布偏向锁失效。

