オリジナルロック最適化

993 ワード

前言
効率的な同時実行はJDK 1.5からJDK 1.6への重要な改善であり、Java開発者チームはこのバージョンで適応性スピン、ロック除去、ロック粗化、軽量ロック、偏向ロックなど、さまざまなロック最適化技術を実現するのに多くの精力を費やしています.これらのテクノロジーは、スレッド間でデータをより効率的に共有し、競合する問題を解決し、プログラムの実行効率を向上させるためです.
スピンロックと適応スピン
反発同期では,性能に最大の影響はブロックの実現である:スレッドを掛ける操作とスレッドを復元する操作はいずれもカーネル状態に移行して完成する必要があり,これらの操作はシステムの同時性に大きな圧力をもたらした.このため,スピンロックを設定し,スレッドに忙しいループ(待機)を実行させた.
スピンロックの評価スピンロック自体は,スレッド切替のオーバーヘッドを回避するが,プロセッサに時間を費やす.したがって、ロックが占有される時間が短いと、スピン待機の効果は非常に良好になる.逆に,ロックが長く占有されると,スピンのスレッドはプロセッサリソースを無駄にするだけである.従って、スピン待ち時間には一定の限界が必要であり、制限された回数を超えてもロックが成功しない場合は、従来の方法でスレッドを停止しなければならない.スピン回数のデフォルト値は10で、パラメータ-XX:PreBlockSpinを使用してユーザーは変更できます.
アダプティブスピンロック
適応は、スピンの時間が固定されないことを意味し、前回同じロックのスピン時間およびロックの所有者の状態によって決定される.同じオブジェクトでスピン待機がロックを正常に取得し、ロックを持つスレッドが実行中である場合、仮想マシンは今回のスピンも成功する可能性が高いと考え、スピン待機が比較的長い間続くことを可能にします.ロックに対してスピンが成功しない場合、プロセッサリソースの浪費を回避するために、後でこのロックを取得する際にスピンプロセスを省略する可能性があります.
ロック解除
ロック解除とは、仮想マシンのインスタントコンパイラが実行されると、一部のコードに同期が要求されるが、共有データの競合が検出されないロックが除去されることを意味します.