Java 中的偏置锁定

2022-09-01 04:32:02

我一直在阅读有关使用标志的偏置锁定如何提高无争用同步的性能。我找不到它的作用以及它如何提高性能的参考。-XX:+UseBiasedLocking

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


答案 1

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

在 Java 6 中,它默认处于打开状态。

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


答案 2

这难道不能回答你的问题吗?

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

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

虽然我认为你会发现它在1.6中默认处于打开状态。使用“打印标志最终诊断”选项查看什么是有效标志。如果要调查服务器应用程序,请确保指定 -server,因为这些标志可能不同:

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


推荐