マルチスレッド(7) - JDKロックの最適化への取り組み

  JDK「ロック」最適化戦略インサイド

1.ロックバイアス

  スレッドがロックを取得する場合は、ロックは、バイアスモードに入るようにスレッドが再びロックを要求する場合、これについて多くを保存し、任意の同期操作は必要ありません:ロックは、コアアイデアがあるバイアスされ、ロックが動作を最適化するための手段でありますロックのアプリケーション動作は、それによってプログラムの性能を向上させます。ほとんどロック競合の機会、アプリケーションロック内の別のスレッドたびに、偏ったモードが失敗するので、効果のない、激しい競争のロック行事のために優れた最適化の結果をロックバイアスにも有効になっていない可能性があります偏ったロック。Java仮想マシンのパラメータを使用-XX:+ UseBiasedLockingが偏っロックを回すことができます。

2.軽量ロック

  あなたがロックに失敗する傾向がある場合は、仮想マシンがすぐにスレッドを中断しない、手段は軽量ロックを最適化するために使用されます。これは単にスレッドがオブジェクトのロックを保持しているかどうかを決定するために、ロックスタックを保持する内部スレッドとしてオブジェクトヘッドへのポインタです。スレッドは軽量ロックを取得する場合、あなたはスムーズに重要な領域に入ることができます。軽量ロックが失敗した場合、他のスレッドがロックをつかんでいる、現在のスレッドのロック要求は、ヘビー級のロックを展開します。

3.スピンロック

  スピンロック - ロック拡張した後、オペレーティングシステムレベルでの実際のスレッドがハングを避けるために、仮想マシンは、最終的な努力を行います。現在のスレッドがロックを取得することが一時的にできないですが、ロックを取得することができたときに、いくつかのCPUのクロック・サイクルをロックすることができ、おそらくでは、不明です。近い将来スレッドを前提とするシステムがロックを取得することができ、そのため、あなたは成功し、その後、ロックを取得し、重要な領域に入ることができれば、後の数サイクル後に、いくつかの空のサイクルを行うには、現在のスレッドの仮想機会。あなたがロックを取得できない場合は、本当にスレッドしようとしているオペレーティングシステムレベルをハングアップします。

4.ロック排除

  より徹底したロックの最適化、時のJava仮想マシンのJITコンパイラは、実行中のコンテキストをスキャンすることによって、共有リソースの競合を削除するには、noロックがないことができ、ロックを排除することで、あなたは無意味な時間のロック要求を保存することができます。例えば、同時競争ベクターの場合には存在しないが、内部のベクトル同期の使用は、以下のコードとして、ロックを要求します。

パブリック文字列[] createStrings(){ 
     ベクトルの<string> V = 新しいベクトルの<string> ();
     以下のためにint型、iは100 <; I = 0 iは++ ){ 
         v.add(持つInteger.toString(I))。
     } 
     戻り v.toArrayを(新しい文字列[0 ])。
}

  上記のコードベクトル、createStrings機能でのみ変数v以来、彼はただ単純なローカル変数。ローカル変数はスレッドのプライベートデータに属する、スレッドスタック上に割り当てられているので、他のスレッドがアクセスすることはできません。このような状況下で、内部ベクトルロック同期のすべてが必要ではありません。この仮想マシンが検出された場合、これらは、ロック操作を削除するには不要になります。

  分析のためのキーテクノロジーは、ロック脱出の排除を関与しました。エスケープ分析は、1つの変数のスコープをエスケープするかどうかを確認することです。本実施例では、変数vは明らかcreateStrings(外)機能をエスケープしませんでした。これは、大胆かつ内部変数であるv操作が仮想マシンに基づいてロックを解除することができます。もしcreateStrings()戻り、他のスレッドがアクセスする変数vがそうすることを、現在の機能のうちのアレイが、V自体、その変数vエスケープではありません。その場合、仮想マシンは、変数vにロック操作を排除することはできません。

  分析を脱出、-serverモードで実行する必要があります-XXを使用することができる:+ DoEscapeAnalysisはエスケープ解析パラメータを開きます。使用-XX:+ EliminateLocksパラメータを排除ロックを開くことができます。

おすすめ

転載: www.cnblogs.com/wangyongwen/p/11260269.html