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


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

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

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

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

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

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

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

  • 相关阅读:
    .net中定义post请求的接口功能
    Nacos部署及使用
    CSOL控制台与FPS优化命令大全
    Linux中关于glibc包导致的服务器死机或者linux命令无法使用的情况
    二蛋赠书二期:《Python机器学习项目实战》
    【axios】的浅度分析
    【无标题】
    数据分析技能点-概括性度量
    Springboot操作Mongodb实现增删改查带分页的操作
    现在的湖仓一体像是个伪命题
  • 原文地址:https://blog.csdn.net/qq_43116031/article/details/133363942