どの高ReentrantLockのと同期したパフォーマンス?

同期基本的な実装のJVMによって保証、

実行するために、JVMの間に、それは偏っロック、ロック、軽量、ヘビー級のロックを表示されることがあります(順番にロックが体重を増やします)

バイアスされたロックは以前に達成確認識別に利用可能である状態をロックする付勢されている、まず、取得されたロック、その識別用のマークワードオブジェクトバイアス糸ロック、次の同期ブロックに時間進み、ダイレクトアクセスロック。他のスレッドがある場合はロック競合とmarkwordないが、自分の、軽量な消費をロックし、ロックをアップグレードします失敗した場合、CASは、置き換え実施しようとしますが見つかりました:最小限

軽量ロックが達成さ:同期ブロックを実行する前に、JVMは、現在のスレッドのスタックフレームに記録されたロックを格納するためのスペースを作成し、レコードとオブジェクトヘッダをロックするmarkWordをコピーします。スレッドは、現在のスレッドがそれが失敗した場合は、ロックを獲得するために競争が現在のスレッドが獲得スピンロックに使用され、そこで説明することに成功した場合、レコードをロックするためのポインタに置き換えられCASオブジェクトヘッダマーク・ワードを使用してみてください。スピンロックの取得に失敗し、ロックがヘビーポインタ識別子ヘッダを受けることになります。ロックを解除すると、首尾よく発生していない競争はそれが失敗した場合、現在のロックは、ロックがヘビー級のロックを膨潤することを競争ショーがあり、存在しない説明し、マークWordの変位アトミックのCAS操作はヘッドオブジェクトを交換してください。

消費:コピーとスピン

ヘビー級のロック:

同期を達成するために、内部オブジェクトを介してロックモニタ(モニタ)と呼ばれています。しかし、モニターロックの本質は、ミューテックスのロックを達成するための基礎となるオペレーティングシステムに依存しています。カーネルモードへのユーザモードから変換する必要があるスレッド間のスイッチへのオペレーティングシステムの理由は、このコストは状態間の遷移は、低効率を同期する理由である、比較的長い時間を必要と、非常に高いです。したがって、これは、ミューテックスロックロックは、私たちが呼んで実現オペレーティングシステムに依存し、「ヘビー級のロックを。」最適化のすべての種類を行うにはJDKに同期し、コアは、ヘビー級のロックの使用を減らすことです。JDK1.6の後、順番に取得するとリリースロックは、パフォーマンス、「軽量ロック」との導入改善、パフォーマンスもたらした消費量を減らす「偏ったロックを。」

ReentrantLockの実装:

ReentrantLockのベースAQS。内部AQS状態の読み取りと書き込みの揮発性およびCASの動作と、一定の条件の下では、ブロックされた状態にスレッドを実現します。

揮発性が同期よりも少ない消費、ReentrantLockのは、ブロックされた状態の消費量に、一定の条件の下糸は非常に同期させることができましょう。

そのため、偏ったロックのパフォーマンス>軽量ロック> ReentrantLockの>シンクロナイズド

軽量かつ偏ったロックロックは特殊な条件下で活性化することができます。

リリース元の2件の記事 ウォンの賞賛0 ビュー9

おすすめ

転載: blog.csdn.net/weixin_42335070/article/details/104917180