原生锁优化

作者: 大海孤了岛 | 来源:发表于2017-05-11 21:20 被阅读0次

前言

高效并发是从JDK1.5到JDK1.6的一个重要改进,Java开发者团队在这个版本上花费了大量的精力去实现各种锁优化技术,如适应性自旋、锁消除、锁粗化、轻量级锁和偏向锁等。这些技术都是为了在线程之间更高效地共享数据,以及解决竞争问题,从而提高程序的执行效率。

自旋锁与自适应自旋

互斥同步中,对性能最大的影响是阻塞的实现:挂起线程和恢复线程的操作都需要转入内核态去完成,这些操作给系统的并发性带来了很大的压力。为此我们设置了自旋锁,让线程执行一个忙循环(等待)。

自旋锁的评估
自旋锁本身虽然避免了线程切换的开销,但它是要占用处理器的时间。因此,如果锁被占有的时间很短,自旋等待的效果会非常好;反之,如果锁被占有的时间很长,那么自旋的线程只会白白浪费处理器资源。因此,自旋等待的时间必须有一定的限度,如果超过了限定的次数仍然没有成功获得锁,就应当使用传统的方式挂起线程。自旋次数的默认值为10,用户可以通过使用参数-XX:PreBlockSpin来更改。

自适应自旋锁

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

锁消除

锁消除是指虚拟机即时编译器运行时,对一些代码要求同步,但是被检测到不可能存在共享数据竞争的锁进行消除。

相关文章

  • 原生锁优化

    前言 高效并发是从JDK1.5到JDK1.6的一个重要改进,Java开发者团队在这个版本上花费了大量的精力去实现各...

  • JVM对Java的原生锁做了哪些优化?

    JVM对Java的原生锁做了哪些优化?在Java之前,Monitor的实现完全依赖底层操作系统的互斥锁来实现,也就...

  • (12)锁优化

    简叙 在JDK1.5之前提供的原生锁synchronized的性能并不是很好,直到JDK1.6对锁进行了大量优化....

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

网友评论

    本文标题:原生锁优化

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