锁优化

作者: yeying12321 | 来源:发表于2017-11-29 21:51 被阅读5次

目的:为了在线程之间更高效地共享数据,以及解决争用问题,从而提高程序的执行效率

1、自旋锁与自适应锁

自旋锁:如果物理机器上有一个以上的处理器,能够让两个或以上的线程同时并行执行,可以让后面请求锁的那个线程“稍等一下”,但不放弃处理器的执行时间,看看持有锁的线程是否很快就会释放锁。为了让线程等待,让线程执行一个忙循环(自旋)。

自旋次数的默认值为10次,超过限定次数没有成功获得锁,就应当使用传统的方式去挂起线程。

自适应锁:如果同一个锁对象上,自旋等待刚刚成功获得过锁,并且持有锁的线程正在进行中,虚拟机认为,那么这次自旋就很有可能再次成功,进而他将运行自旋等待持续相对更长时间,对于某个锁,自旋很少成功获得过,那在以后要获取这个锁时将可能省略掉自旋过程,以避免浪费处理器资源。

2、锁消除:对一些代码上要求同步,但是被检测到不可能存在共享数据竞争的锁进行消除。
主要判定依据来源于逃逸分析的数据支持。如果判断在一段代码中,堆上的所有数据都不会逃逸出去从而被其他线程访问到,那就可以把它们当做栈上数据对待,认为它们是线程私有的,同步加锁自然无须进行。

3、锁粗化:如果虚拟机探测到有这样一串零碎的操作都对同一个对象加锁,将会把加锁同步的范围扩展(粗化)到整个操作序列的外部,这样只需加锁一次就可以了。

4、轻量级锁:在没有多线程竞争的前提下,减少传统的重量级锁使用操作系统胡楚靓产生的性能消耗。
HopSpot虚拟机对象头分为两部分,第一部分用于存储对象自身的运行时数据,如哈希码、GC分呆年龄等,官方称它为“Mark Word”,另一部分用于存储指向方法区对象类型数据的指针。对象Mark Word的锁标志位为“00”,表示轻量级锁定,“01”表示未锁定,如果有两个以上的线程争用同一个锁,轻量级锁膨胀为重量级锁,标志变为“10”,Mark Word中存储的就是指向重量级锁(互斥量)的指针。

5、偏向锁:目的消除数据在无竞争情况下的同步原语,进一步提高程序的性能。
这个锁会偏向于第一个获得它的线程,如果在接下来的执行过程中,该锁没有被其他的线程获取,则持有偏向锁的线程将永远不需要进行同步。

相关文章

  • MS汇总

    数据库相关[MS-关于锁(乐观锁,悲观锁,行锁、表锁,共享锁,排他锁)Mysql索引优化Mysql查询优化Mysq...

  • Java高并发实战,锁的优化

    锁优化 这里的锁优化主要是指JVM 对 synchronized 的优化。 自旋锁 互斥同步进入阻塞状态的开销都很...

  • SQL锁优化问题

    关于SQL锁。SQL优化少不了SQL锁优化 1.SQL常见锁有:共享锁 作用于查询操作(Select) 2.排他锁...

  • Java虚拟机的锁优化

    JDK内部的优化策略主要包括以下几点 锁偏向 轻量级锁 自旋锁 锁消除 1.锁偏向 锁偏向是一种针对加锁操作的优化...

  • 锁优化

    锁优化 JDK6之后对锁的实现引入了大量的优化,如适应性自旋(Adaptive Spinning)、锁消除(Loc...

  • java面试题 --- 并发②

    1. JDK1.6 开始对 synchronized 做了哪些优化?使用了锁升级、锁粗化、锁消除等方式来优化性能。...

  • JVM中的锁优化

    锁优化 Jvm 在加锁的过程中,会采用自旋、自适应、锁消除、锁粗化等优化手段来提升代码执行效率。 什么是锁升级,降...

  • 锁优化(5种方法)

    转载:http://www.importnew.com/21353.html 1. 锁优化的思路和方法 锁优化的思...

  • 多线程优化--synchronized、Lock等优化

    1、synchronized (1)重量锁,轻量锁,偏向锁(synchronized自带的优化) (2)锁的粒度 ...

  • 锁优化

    高并发是从1.5到1.6的一个重要的改进,HotSpot虚拟机开发团队在这个版本上话费了大量的精力去实现各种锁优化...

网友评论

      本文标题:锁优化

      本文链接:https://www.haomeiwen.com/subject/wlapbxtx.html