どのようなメカニズム(RPM)は、Javaのパフォーマンスの向上は、ロックを持っていますか?

転送:https://forum.idevfun.io/t/topic/235/2

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

バイアスされたロック

いわゆるバイアスロックはスレッドで競合しないようにするために、(オブジェクトのシリアル化は、明らかにこの情報の開始を確認できた場合、白色は、予約されたメモリの数バイトのオブジェクト情報の先頭である)オブジェクトインスタンスでマークWordを意味します強烈な状況の下、ロックとアンロックのパフォーマンスの低下を(CAS軽量ロックは、複数の操作を伴う)減少させることは、この最後に使用し、このオブジェクトのロック・スレッドのID情報を保存する必要がある場合は、再度要求するスレッドオブジェクトのロックマークWordでそれは同じID番号であれば、あなただけのidスレッド自体と比較して、オブジェクトの偏ったロック情報のマークWordを(つまり、スレッドID)で読み取る必要がある、直接リアルにすることなくロックの成功を考える取得ロックおよびロック解除操作。実際には、それはもう、あなたが前にここにきたこの時間を意味し、他の一つは、これら二つの間に来ない、このスレッドのために、リソースのロックオブジェクトカジュアルな使用が安全です。演奏練習と引き換えに、キャッシングが、より高い効率を得るためにロックを使用して競争力の弱いシナリオをロックする傾向があります。CASの競争を使用する場合はバイアスされ、ロックはより熾烈な競争、軽量ロックにアップグレードバイアスされ、ロックを示す、失敗しました。

軽量ロック

いわゆる軽量ロックロックリソースの消費は(すなわち、記録空間のロックとして事前競争軽量、空間配分のスレッドをロックする、バイアスされたロック機構よりも達成されるスタックメモリ内のスレッドを対応するオブジェクト軽量ロックオブジェクトヘッダフィールドのコピー)、良いコピーした後、成功したならば、軽量ロック取得成功、記録スペースを指してヘッド部にオブジェクトをターゲットにしようと、オブジェクトロックのために競争するためにCASによって、スレッド、それが失敗した場合、次いでスピンを入力する(それがサイクルを意味する)ロックを取得するために取ることを試みました。あなたは、特定の回数をスピンやロック、ヘビー級にロックを取得できない場合。

スピンロック

端的に言えするには、障害発生後に直接ロックの振る舞いを取得しようとするブロックされた状態にスレッドと取られないようにするために、一定数のサイクルを、ロックを取得することです。あなたがそれを行うことができ、なぜテストがロックを示しているので、ホールド時間は、一般に、(、システムリソースを消費し、ユーザーモードからカーネルモードを入力する必要が遮断された状態に通し、それは、オペレーティングシステムの管理レベルになるとブロッキング状態終了)非常に短い、一般的にロックするいくつかの試みを競争することができます。

ヘビーロック

いわゆるヘビー級のロックは、実際には、最も原始的とJavaのブロッキングロックの実現の始まりです。JVMと呼ばれるオブジェクトモニターで。次いで、すべてのスレッドヘビー競争をロックミューテックスに対象点のオブジェクトヘッダフィールドをロックし、競争は(オペレーティング・システム・レベル)ブロックされた状態にスレッドを失敗し、待機プールロックオブジェクトに起こされるのを待って、スレッドの後に再びロックリソースを競争するために起こされます。

概要

いわゆるロックのエスカレーションは、実際には、軽量で、ヘビー級をロックするロック(スピンロック)をロックバイアスするために、これらの概念が困ってきた前に、簡単ではありませんが、オンライン実際に、分かりやすく、すべての記事の説明を理解するためにすべてがJava同期メカニズム同期パフォーマンスの最適化から始まり、最も原始的な同期メカニズムは、直接ヘビー級ロックに、最初のいくつかのステップをスキップするように同期されますが、ユーザーモードからのため、ブロックされた状態にする必要がヘビー級スレッドのロック(このオペレーティング・システム・レベルのリソースを消費する操作)カーネル・モードに入り、これはそうである、同期同期機構は非常に煩雑に非効率的になります。したがって、この問題を解決するために、バイアスロックの導入前にJavaで、軽量ロックのスピンは、これらの概念をロックします。これらのロックは、それを最適化取得する方法?オンライン無理解できる説明は、実際には、その白は、偏ったロックCAS操作を避けるために、CAS動作に一点だけだった矛盾が生じた場合には、問題を取り除くために、オブジェクトヘッドとは対照的にロックを入れてみてください、そして軽量さはありません、実際には、二つのうちの一つが使用されているスピンロックし、それをロックは、パフォーマンスに非常に有害であるカーネルのブロックされた状態、にスレッドを避けるために、操作およびリサイクルCASはヘビー級のロックながら、離れてロックされた問題を解決しようとしました欲求不満はそれがメモリは、>>よりCAS動作と優れた空気循環によってブロックされたCPUを解決するために、加速問題を決定するために読んでスレッドを覚ますことができます意味、究極のソリューションです。

おすすめ

転載: www.cnblogs.com/ismallboy/p/11575656.html