Java仮想マシンのロック最適化の取り組み

Java仮想マシンのロック最適化の取り組み

パブリック プラットフォームとして、JDK 自体は並行プログラムのパフォーマンスに知恵を絞っており、並行処理中にシステム スループットを提供するために JDK 内であらゆる手段を試してきました。ここでは、JDK 内のいくつかの「ロック」最適化戦略を簡単に紹介します。

1. 方向をロックする

ロック バイアスは、ロック操作の最適化手法です。

スレッドがロックを取得すると、ロックはバイアス モードになります。このスレッドが再度ロックを要求する場合、同期操作は必要ありません。これにより、ロック要求操作が大幅に削減され、プログラムのパフォーマンスが向上します。

したがって、ロックの競合がほとんどない状況では、同じスレッドが同じロックを連続して複数回要求する可能性が非常に高いため、バイアス ロックの方が最適化効果は高くなります。ただし、ロックの競争が激しい状況では効果は良くありません。なぜなら、激しい競争の場合、異なるスレッドが毎回同じロックを要求するという状況が最も起こりやすいからです。いくつかの一般的なロックについて詳しくは、ここをクリックしてください。

[[243266]]

2. 軽量ロック

バイアス ロックが失敗した場合、前回ロックを要求したスレッドはこのスレッドと同じではありません。バイアスをロックできない場合は、同期操作を回避できません。このとき、仮想マシンはスレッドを直ちに中断しません。軽量ロックと呼ばれる最適化を使用します。

軽量ロックの操作も非常に便利です。これは、オブジェクト ヘッダーをポインターとして使用して、Chiyou ロックのスレッド スタックの内部を指し示し、スレッドがオブジェクト ロックを保持しているかどうかを判断します。スレッドが軽量ロックを正常に取得すると、クリティカル セクションにスムーズに入ることができます。軽量ロックが失敗した場合、他のスレッドがロックをプリエンプトしたことを意味し、現在のスレッドのロック要求は重量ロックに拡張されます。いくつかの一般的なロックについて詳しくは、ここをクリックしてください。

3. オプションのロック

ロックが拡張された後、スレッドがオペレーティング システム レベルで実際にハングするのを防ぐために、仮想マシンは最大限の努力、つまり自己選択ロックを実行します。現在のスレッドは一時的にロックを取得できないため、いつロックを取得できるかは不明です。おそらく、数 CPU クロック サイクル後にロックを取得できるでしょう。この場合、スレッドを単に一時停止するだけではコストがかかりすぎる操作になる可能性があるため、システムは賭けに出ます。つまり、スレッドが近い将来にロックを取得できると想定します。

したがって、仮想マシンは現在のスレッドに空のループを実行させます。数回のループの後、ロックを取得できれば、クリティカル セクションに正常に入ります。ロックを取得できない場合、スレッドは実際にはオペレーティング システム レベルで中断されます。

4. ロックの除去

ロックの除去は、より徹底したロックの最適化です。 JIT コンパイル中、Java 仮想マシンは実行コンテキストをスキャンして、共有リソースの競合の可能性がないロックを削除します。ロックを排除することで、無意味なロック要求時間を節約できます。

以下の状況では、ベクターを使用し、ベクター内で同期要求ロックを使用します。

  1. パブリック文字列[] createStrings(){
  2. ベクトル<文字列> v = 新しいベクトル<文字列>();
  3. ( int i=0;i<100;i++)の場合{
  4. v. ( Integer .toString(i) )を追加します
  5. }
  6. v.toArray(新しいString[]{})を返します
  7. }

V は createStrnigs 関数でのみ使用されるため、単なるローカル変数です。ローカル変数はスレッド スタック上に割り当てられ、スレッド専用のデータであるため、他のスレッドからはアクセスできません。したがって、この場合、Vector 内のすべてのロック同期は不要です。仮想マシンがこの状況を検出すると、これらの無駄なロック操作を削除します。いくつかの一般的なロックについて詳しくは、ここをクリックしてください。

ロック解除に関わる重要な技術はエスケープ解析です。いわゆるエスケープ分析は、変数が特定のスコープから脱出するかどうかを観察することです。この場合、変数 v は明らかに createString 関数をエスケープしません。これに基づいて、仮想マシンは v 内のロック操作を大胆に削除できます。createStrings が String 配列ではなく v 自体を返す場合、変数 v が現在の関数から脱出したと見なされ、v が他のスレッドからアクセスされる可能性があります。この場合、仮想マシンは v 内のロック操作を排除できません。

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

<<:  [AWS コミュニティディスカッション活動概要 3] クラウドデータベースの長所と短所

>>:  面接でJava仮想マシン(JVM)について質問されたら、この記事を読んでください。

推薦する

cnドメイン名登録の開放の賛否についてコメント

2012年5月29日、cnドメイン名が個人登録に開放され、中国のインターネットに神秘的な色を添えたと...

主要な

前回ジュニアSEOERの基準を書いて以来、皆様からの評価と期待をいただいております。ここに感謝申し上...

#おすすめ# contabo: 値下げと数量増加、ドイツVPS、超大容量SSD、1Gbps無制限トラフィック

Contabo、最新ニュース:SSDシリーズのVPSに一連の革新的な改革とアップグレードが行われ、構...

時代は発展し、促進しており、私たちは時代のペースに遅れないようにしなければなりません

21世紀に入り、経済の発展に伴い、人々の物質的、文化的ニーズが満たされ、精神的、文化的ニーズが時代の...

catalysthost-年間42ドル/256MBメモリ/KVM/15GBハードディスク/100MB無制限

catalysthost は、openvz も付属する 100M 無制限 KVM VPS を宣伝して...

シナジーリサーチ:クラウドサービスプロバイダーの収益は今年上半期に20%増加

海外メディアの報道によると、市場調査会社シナジーリサーチが発表したデータによると、2020年上半期の...

クラウドネイティブデータベースがデジタルイノベーションの力を発揮

人類が誕生して以来、データの記録と処理能力の探求は止まることはありませんでした。たとえば、古代におけ...

通信事業者はクラウド主権を強化し、もはや舞台裏で大物でありたくないと考えている

中国電信や中国移動に代表される「キャリアクラウド」は、デジタル市場において見過ごされつつある新たな変...

Web 2.0 テクノロジーが SEO に与える影響

2006 年の Web 2.0 テクノロジの発展に伴い、検索エンジンはウェブサイトのクロール戦略とウ...

WeiboマーケティングでSinaとTencentを行き来する方法

Weibo は現在、非常に人気があります。Weibo マーケティングはプロモーターの生活に浸透してお...

クラウド向けの 3 つの Linux 暗号化ツール

[51CTO.com クイック翻訳] セキュリティの観点から、クラウド ストレージは存在すべきではあ...

クラウド疲労: 企業がアプリケーションをクラウドから移行するのはなぜでしょうか?

最近の Enterprise Strategy Group の調査によると、回答者の半数以上がすでに...

テンセントクラウドとソウル観光体育局がスマート観光プラットフォームの構築で協力

テンセントクラウドは5月18日、韓国ソウル観光体育局との提携を発表した。 Tencent Cloud...

ウェブサイトの記事は1日おきに収集され、3日目のスナップショットが更新されます

最近、福建省の SEO は部門関連の問題で忙しく、SEO ブログにはあまり注意を払っていません。今日...

underhost: オランダのサーバー、防弾ホスト、著作権侵害の申し立てを無視、コンテンツ制限なし

Underhost のオランダのデータセンターには、2 つの特別なサーバー、「防弾サーバー」がありま...