在java中有偏见的锁定

问题描述 投票:26回答:3

我继续阅读有关如何使用标志-XX:+UseBiasedLocking进行偏置锁定可以提高无争用同步的性能。我找不到它的作用以及它如何改善性能的参考。

任何人都可以解释我究竟是什么,或者可能指向我解释一些链接/资源?

java concurrency jvm locking biased-locking
3个回答
35
投票

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

它默认在Java 6中启用。

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


5
投票

这不能回答你的问题吗?

http://www.oracle.com/technetwork/java/tuning-139912.html#section4.2.5

启用一种技术来提高无竞争同步的性能。对象被“偏向”线程,该线程首先通过monitorenter字节码或同步方法调用获取其监视器;在多处理器计算机上,该线程执行的后续监视器相关操作相对快得多。一些具有大量无竞争同步的应用程序可以在启用此标志的情况下获得显着的加速;某些具有某些锁定模式的应用程序可能会出现减速,但已尝试尽量减少负面影响。

虽然我认为你会发现默认情况下它在1.6。使用PrintFlagsFinal诊断选项查看有效标志是什么。如果您正在调查服务器应用程序,请确保指定-server,因为标志可能不同:

http://www.jroller.com/ethdsy/entry/print_all_jvm_flags


3
投票

我一直在想自己有偏见的锁。

然而,似乎java的偏置锁在intel的nehalem处理器上比普通锁更慢,并且可能是因为nehalem在两代处理器上。请参阅http://mechanical-sympathy.blogspot.com/2011/11/java-lock-implementations.htmlhttp://www.azulsystems.com/blog/cliff/2011-11-16-a-short-conversation-on-biased-locking

还有更多信息,这里https://blogs.oracle.com/dave/entry/biased_locking_in_hotspot

我一直希望有一些相对便宜的方法来撤销对英特尔的偏见锁定,但我开始相信这是不可能的。我所看到的关于它是如何完成的文章依赖于:1)使用操作系统来停止线程2)发送信号,即在另一个线程中运行代码3)具有保证在安全点中经常运行的安全点其他线程并等待一个执行(这是java所做的)。 4)具有类似的安全点,即对返回的调用 - 而另一个线程将代码修改为断点...

© www.soinside.com 2019 - 2024. All rights reserved.