码迷,mamicode.com
首页 > 其他好文 > 详细

针对jdk1.6以上的版本锁优化

时间:2020-03-31 01:00:27      阅读:93      评论:0      收藏:0      [点我收藏+]

标签:存在   数据   获得   对象   串操作   过程   虚拟   需要   处理   

锁优化

自适应的自旋锁

自旋锁,为了让线程等待,让线程执行一个忙循环(自旋)。超过10次仍然没有成功获取锁,线程挂起。

自适应的自旋锁,前一次在同一个锁上的自旋时间和锁的拥有者的状态决定。在同一个锁对象上,自旋等待刚刚成功获得过锁,并且持有锁的线程正在进行中,那么虚拟机就会认为这次自旋也很有可能再次成功,进而它将允许自旋等待持续相对更长的时间,比如100个循环。另一方面,如果对于某个锁,自旋很少成功获得过,那在以后获取这个锁时将可能省略掉自旋过程,以避免浪费处理器资源。

锁粗化

JVM检测一串操作都对同一对象加锁,把加锁同步的范围粗化到整个操作序列的外部。

锁消除

JVM在JIT编译运行时,通过对运行上下文的扫描,去除不可能存在共享数据竞争的锁。判断依据逃逸分析,判断堆上的数据不会被其它线程访问,那么把它们当做栈上的数据对待,认为它们是私有,同步加锁自然无须进行。

轻量级锁

jdk6引入。对于绝大部分锁,在整个生命周期内不会存在竞争。没有竞争,使用CAS消除互斥量。

偏向锁

jdk6引入。对于绝大部分锁,在整个生命周期内不会存在竞争,并且总由同一个线程多次获得。这个锁偏向第一个获取它的线程,如果接下来的执行中,该锁没有被其它的线程获取,则持有偏向锁的线程永远不需要再进行同步。

 

https://www.jianshu.com/p/b516a981a1a7

针对jdk1.6以上的版本锁优化

标签:存在   数据   获得   对象   串操作   过程   虚拟   需要   处理   

原文地址:https://www.cnblogs.com/ivy-xu/p/12588169.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!