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

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

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

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

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

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

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

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

你可能感兴趣的:(java)