Java中的偏向锁定


问题内容

我一直在阅读有关使用flag的有偏锁定如何-XX:+UseBiasedLocking提高无竞争的同步性能的信息。我找不到它做什么以及如何提高性能的参考。

谁能解释我的确切含义,或者可以指出一些链接/资源来解释我?


问题答案:

本质上,如果您的对象仅由一个线程锁定,则JVM可以进行优化,并将该对象“偏向”该线程,以使对该对象进行后续的原子操作不会产生同步开销。我想这通常是针对过于保守的代码,该代码对对象执行锁定而从未将它们暴露给另一个线程。实际的同步开销只会在另一个线程尝试获取该对象的锁时才起作用。

在Java 6中,默认情况下处于启用状态。

-XX:+
UseBiasedLocking启用一项技术,以提高无竞争的同步性能。一个对象被“偏向”线程,该线程首先通过Monitorenter字节码或同步方法调用来获取其监视器。在多处理器计算机上,该线程执行的后续与监视器相关的操作相对要快得多。启用此标志后,某些具有大量无竞争的同步的应用程序可能会实现显着的加速。尽管已尝试将负面影响降到最低,但某些具有某些锁定模式的应用程序可能会变慢。