JVM中的锁优化

程序员 2024-9-13 15:32:11 80 0 来自 中国
锁优化

Jvm 在加锁的过程中,会接纳自旋、自顺应、锁消除、锁粗化等优化本领来提拔代码实验服从。

  • 什么是锁升级,降级?
锁的4中状态:无锁状态、方向锁状态、轻量级锁状态、重量级锁状态(级别从低到高)。
所谓的锁升级、降级,就是 JVM 优化 synchronized 运行的机制,当 JVM 监测到不同的竞争状态是,会主动切换到不同的锁实现。这种切换就是锁的升级、降级。

方向锁

由于颠末大量的研究发现,大多数时间是不存在锁竞争的,经常是一个线程多次得到同一个锁,因此假如每次都要竞争锁会增大许多没有须要付出的代价,为了低落获取锁的代价,才引入的方向锁。
在步伐的一开始,处于无锁状态。紧接着,有一个线程申请锁,此时通过CAS竞争锁(CAS包管了此竞争举动的原子性),获取锁乐成,Mark Word 将标志为方向锁。当同样的线程再次到来,发现是锁的持有者而且是方向锁,直接进入临界区。
因此,方向锁意味着,不会发生竞争条件,由于只有一个线程。
轻量级锁

随着步伐的运行,有新的线程要进入临界区,通过CAS竞争锁失败。Mark Word立即将方向锁标志锁为轻量级锁,由于已经发生了竞争条件。紧接着,会反复同通过CAS为线程获取锁,假如占据锁的线程在临界区待的时间很短,那么申请锁的线程将很快拿到锁。
因此,轻量级锁意味着,有竞争条件,但是各人能很快地被分配到锁。
重量级锁

固然,申请锁的线程并不总是能很快地获取到锁,与其反复地CAS重试而浪费CPU时间,不如直接将线程壅闭住。那么,在轻量级锁的情况下,假如有线程高出肯定次数的重试照旧获取不到锁,Mark Word立即将轻量级锁标志为重量级锁,以后全部获取不到锁的线程将被壅闭,需要Monitor的加入。
因此,重量级锁意味着,在有竞争条件的情况下,线程不能很快地被分配到锁。
Synchronized的锁只能膨胀,不能紧缩。方向锁和轻量锁为乐观锁,重量级锁为灰心锁。
Synchronized的利益在于,它的优化、锁申请开释、锁的分配都是主动的,开辟者能快速地利用。
轻量级锁什么时间升级为重量级锁?

线程1获取轻量级锁时会先把锁对象的对象头MarkWord复制一份到线程1的栈帧中创建的用于存储锁记录的空间(称为DisplacedMarkWord),然后利用CAS把对象头中的内容更换为线程1存储的锁记录(DisplacedMarkWord)的地点;
假如在线程1复制对象头的同时(在线程1CAS之前),线程2也准备获取锁,复制了对象头到线程2的锁记录空间中,但是在线程2CAS的时间,发现线程1已经把对象头换了,线程2的CAS失败,那么线程2就实验利用自旋锁来等候线程1开释锁。
但是假如自旋的时间太长也不可,由于自旋是要斲丧CPU的,因此自旋的次数是有限定的,好比10次大概100次,假如自旋次数到了线程1还没有开释锁,大概线程1还在实验,线程2还在自旋等候,这时又有一个线程3过来竞争这个锁对象,那么这个时间轻量级锁就会膨胀为重量级锁。重量级锁把除了拥有锁的线程都壅闭,防止CPU空转。
2.png 锁膨胀

当轻量级锁失败,假造机就会利用重量级锁。利用重量级锁时,对象的Mark Word中的末尾的2位会被设置为'10'。整个Mark Word体现指向monitor对象的指针。
JVM对锁的优化

1.自旋锁

在没有加入锁优化时,Synchronized是一个非常“胖大”的家伙。在多线程竞争锁时,当一个线程获取锁时,它会壅闭全部正在竞争的线程,如许对性能带来了极大的影响。在挂起线程和规复线程的操纵都需要转入内核态中完成,这些操纵对体系的并发性能带来了很大的压力。同时HotSpot团队注意到在许多情况下,共享数据的锁定状态只会一连很短的一段时间,为了这段时间去挂起和复兴壅闭线程并不值得。在现在多处置惩罚器情况下,完全可以让另一个没有获取到锁的线程在门外等候一会(自旋),但不放弃CPU的实验时间。等候持有锁的线程是否很快就会开释锁。为了让线程等候,我们只需要让线程实验一个忙循环(自旋),这便是自旋锁由来的缘故原由。
2.锁粗化

假如一系列的一连操纵都是对同一个对象反复加锁息争锁,以致加锁操纵是出现在循环体中的,那纵然没有线程竞争,频仍地进行互斥同步操纵也会导致不须要的性能斲丧。在这种情况下,假造机便会把全部的锁操纵优化成对锁的一次哀求,从而淘汰对锁的哀求同步次数,这个操纵叫做锁粗化。
3.锁消除

锁消除是指JIT编译器在运行时,将一些在代码上同步了但实际上不大概存在共享数据竞争的锁进行消除。
锁消除紧张是根据逃逸分析技能来判断的,假如判断在一段代码中,堆上的全部数据都不会逃逸出去从而被别的线程访问到,那就可以把它们当做栈上数据对待,以为它们是线程私有的,同步加锁自然就无需进行了。
参考:http://t.zoukankan.com/rouqinglangzi-p-7805581.html
您需要登录后才可以回帖 登录 | 立即注册

Powered by CangBaoKu v1.0 小黑屋藏宝库It社区( 冀ICP备14008649号 )

GMT+8, 2024-11-22 23:19, Processed in 0.176026 second(s), 35 queries.© 2003-2025 cbk Team.

快速回复 返回顶部 返回列表