美文网首页
JVM锁优化和膨胀过程

JVM锁优化和膨胀过程

作者: 小动乾坤 | 来源:发表于2024-03-18 23:29 被阅读0次

自旋锁:自旋锁其实就是在拿锁时发现已经有线程拿了锁,自己如果去拿会阻塞自己,这个时候会选择进行一次忙循环尝试。也就是不停循环看是否能等到上个线程自己释放锁。自适应自旋锁指的是例如第一次设置最多自旋10次,结果在自旋的过程中成功获得了锁,那么下一次就可以设置成最多自旋20次。

锁粗化:虚拟机通过适当扩大加锁的范围以避免频繁的拿锁释放锁的过程。

锁消除:通过逃逸分析发现其实根本就没有别的线程产生竞争的可能(别的线程没有临界量的引用),或者同步块内进行的是原子操作,而“自作多情”地给自己加上了锁。有可能虚拟机会直接去掉这个锁。

偏向锁:在大多数的情况下,锁不仅不存在多线程的竞争,而且总是由同一个线程获得。因此为了让线程获得锁的代价更低引入了偏向锁的概念。偏向锁的意思是如果一个线程获得了一个偏向锁,如果在接下来的一段时间中没有其他线程来竞争锁,那么持有偏向锁的线程再次进入或者退出同一个同步代码块,不需要再次进行抢占锁和释放锁的操作。

轻量级锁:当存在超过一个线程在竞争同一个同步代码块时,会发生偏向锁的撤销。当前线程会尝试使用CAS来获取锁,当自旋超过指定次数(可以自定义)时仍然无法获得锁,此时锁会膨胀升级为重量级锁。

重量级锁:重量级锁依赖对象内部的monitor锁来实现,而monitor又依赖操作系统的MutexLock(互斥锁)。当系统检查到是重量级锁之后,会把等待想要获取锁的线程阻塞,被阻塞的线程不会消耗CPU,但是阻塞或者唤醒一个线程,都需要通过操作系统来实现。

相关文章

  • 多线程的锁升级原理

    什么是锁升级(锁膨胀)? JVM优化synchronized的运行机制,当JVM检测到不同的竞争状态时,就会根据需...

  • 浅谈偏向锁、轻量级锁、重量级锁

    为了换取性能,JVM在内置锁上做了非常多的优化,膨胀式的锁分配策略就是其一。理解偏向锁、轻量级锁、重量级锁的要解决...

  • JVM中的锁优化

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

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

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

  • JVM锁优化

    synchronized重量级锁 synchronized是通过对象内部的一个叫做监视器锁(monitor)来实现...

  • 锁优化

    概述 本文主要论述jvm的各种锁优化技术,主要分为适应性自旋、锁消除、锁粗化、轻量级锁和偏向锁。这些技术都是为了在...

  • JVM锁消除和锁粗化

    锁消除和锁粗化都是jvm对于锁的优化措施 锁消除 锁消除就是字面意思,虚拟机会根据自己的代码检测结果取消一些加锁逻...

  • JVM调优

    JVM(Java虚拟机)优化大全和案例实战 JVM 优化经验总结 JVM 数据存储介绍及性能优化 JVM诊断...

  • synchronized 锁优化和锁升级过程

    一、synchronized锁优化 高效并发是从JDK 5升级到JDK 6后一项重要的改进项,HotSpot虚拟机...

  • java.util.concurrent解析——Abstract

    尽管JVM在并发上已经做了很多优化工作,如偏向锁、轻量级锁、自旋锁等等。但是基于Synchronized wait...

网友评论

      本文标题:JVM锁优化和膨胀过程

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