web-dev-qa-db-ja.com

バイアスロックインjava

フラグ-XX:+UseBiasedLockingを使用したバイアスロックが、競合のない同期のパフォーマンスをどのように改善できるかについて読み続けています。それが何をするのか、そしてそれがどのようにパフォーマンスを改善するのかについての参照を見つけることができませんでした。

誰かが私にそれが正確に何であるかを説明できますか、または説明するいくつかのリンク/リソースを私に指摘することができますか?

30

基本的に、オブジェクトが1つのスレッドによってのみロックされている場合、JVMは最適化を行い、オブジェクトに対する後続のアトミック操作で同期コストが発生しないように、そのオブジェクトをそのスレッドに「バイアス」できます。これは通常、オブジェクトを別のスレッドに公開することなくオブジェクトのロックを実行する、過度に保守的なコードを対象としていると思います。実際の同期オーバーヘッドは、別のスレッドがオブジェクトのロックを取得しようとしたときにのみ開始されます。

Java 6ではデフォルトでオンになっています。

-XX:+ UseBiasedLocking競合のない同期のパフォーマンスを向上させる手法を有効にします。オブジェクトは、monitorenterバイトコードまたは同期されたメソッド呼び出しを介して最初にモニターを取得するスレッドに「バイアス」されます。そのスレッドによって実行される後続のモニター関連の操作は、マルチプロセッサーマシンでは比較的高速です。競合のない同期が大量にある一部のアプリケーションでは、このフラグを有効にすると大幅に高速化される場合があります。悪影響を最小限に抑えるための試みがなされていますが、特定のロックパターンを持つ一部のアプリケーションでは速度が低下する場合があります。

36
Clement P

これはあなたの質問に答えませんか?

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

5
Danny Thomas

私は自分自身に偏ったロックについて疑問に思っていました。

ただし、Javaのバイアスロックは、Intelのnehalemプロセッサでは通常のロックよりも遅く、おそらくnehalem以降の2世代のプロセッサでは遅いようです。 http://mechanical-sympathy.blogspot.com/2011/11/Java-lock-implementations.html およびここ http://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)osを使用してスレッドを停止する2)シグナルを送信する、つまり他のスレッドでコードを実行する3)安全なポイントがあり、他のスレッドと1つが実行されるのを待っています(これはJavaが行うことです)。4)リターンの呼び出しである同様のセーフポイントを持っています-そして他のスレッドはコードをブレークポイントに変更します.。。

3
Josh S
0
lich0079