在java中有偏见的锁定

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

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

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

它默认在Java 6中启用。

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

这不回答你的问题吗?

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

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

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

还有更多信息,请访问https://blogs.oracle.com/dave/entry/biased_locking_in_hotspot

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