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


    Java虚拟机(JVM)对Java的原生锁(即synchronized关键字)进行了多项优化,以提高多线程程序的性能和可伸缩性。这些优化包括:

    1. 偏向锁: 偏向锁是一种针对单线程执行的锁的优化机制。当一个线程获得了偏向锁后,如果没有其他线程尝试争夺该锁,那么该线程可以无阻塞地再次获取锁。这减少了锁的竞争,提高了单线程执行时的性能。

    2. 轻量级锁: 轻量级锁是为多线程场景而设计的锁。当多个线程争夺同一个锁时,JVM会尝试使用轻量级锁来减少争夺的代价。轻量级锁使用CAS(Compare-and-Swap)操作来尝试获取锁,仅当争夺激烈时才会升级为重量级锁。

    3. 自旋锁: 自旋锁是一种在获取锁失败时不立即阻塞线程,而是让线程执行一定数量的忙等待(自旋)操作。这可以在短时间内避免线程阻塞和切换的开销。JVM可以根据硬件和运行时条件来选择是否使用自旋锁以及自旋的次数。

    4. 适应性自旋: JVM可以根据锁的竞争情况和线程的运行情况动态地调整自旋的次数。这有助于在不同负载下找到最优的自旋策略,以提高性能。

    5. 锁消除: 在某些情况下,JVM可以检测到锁不必要的使用,例如在局部范围内使用锁,但锁并不会被多个线程争夺。在这种情况下,JVM可以进行锁消除,将锁操作优化掉,以减少不必要的同步开销。

    6. 锁粗化: JVM可以检测到一系列紧密相邻的锁操作,然后将它们合并

  • 相关阅读:
    OceanBase 分布式数据库【信创/国产化】- OceanBase V4.3 里程碑版本
    京东API接口大全
    luffy-(12)
    python调用c++版本dll01-简单的加法调用
    前行不缀 未来可期,鸿蒙生态发展迈入全新阶段
    nextTick 使用场景
    在go(Gin)中使用事物
    汽车OTA
    中小型企业网络实战topo
    windows平台编译CEF支持H264(MP3、MP4)超详细
  • 原文地址:https://blog.csdn.net/qq_43116031/article/details/133363942