码上敲享录 > java面试题及答案大全 > JVM 对 Java 的原生锁做了哪些优化?

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

上一章章节目录下一章 2023-07-11已有248人阅读 评论(0)

JVM(Java虚拟机)对Java的原生锁(synchronized)进行了许多优化,以提高并发性能和减少竞争的开销。以下是一些JVM对Java原生锁的优化策略:


1. 自旋锁消除(Lock Coarsening):

JVM会尝试将多个连续的同步块合并成一个较大的同步块,以减少同步块之间的锁竞争。这样可以减少线程在获取锁时发生的进入和退出同步块的开销。


2. 锁消除(Lock Elimination):

JVM会分析代码,如果检测到某个共享变量只被一个线程访问,并且不存在线程之间的竞争,就会将锁消除。这样可以避免不必要的同步操作,提高性能。


3. 锁粗化(Lock Coarsening):

JVM会尝试将多个独立的同步块合并成一个较大的同步块,以减少同步块之间的上下文切换开销。


4. 偏向锁(Biased Locking):

JVM引入了偏向锁的概念,当一个线程获得锁后,JVM会将锁的信息记录在对象头中,并将线程ID记录下来。这样,在后续该线程再次请求该锁时,JVM会直接判断该线程是否为原始线程,并且锁是否仍然处于被竞争的状态。如果是,则无需进行任何同步操作,从而减少了锁的争用和竞争的代价。


5. 偏向锁撤销(Biased Lock Revocation):

如果存在其他线程竞争同一个锁,偏向锁就会被撤销,锁会升级为重量级锁。


这些优化策略的实施,可以显著提高同步块的竞争情况下的性能,减少了锁开销和上下文切换的开销,从而提升整体的并发性能。需要注意的是,这些优化策略是由具体的JVM实现来决定的,不同JVM实现可能会有不同的优化方式和效果。


0

有建议,请留言!

  • *您的姓名:

  • *所在城市:

  • *您的联系电话:

    *您的QQ:

  • 咨询问题:

  • 提 交