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)について質問されたら、この記事を読んでください。

推薦する

EUが攻撃開始:クラウドコンピューティング企業はGDPRの影響を受けるのか?

[[230772]]欧州連合の一般データ保護規則(GDPR)が5月25日に正式に施行されました。20...

私がウェブサイトを台無しにしてしまった経緯

はじめに:2月にSEOに触れ、3月中旬に熱意を持って現在のサイトを引き継ぎました。では、これ以上前置...

ライブストリーミングの魔法

年末が近づくにつれ、ライブストリーミング電子商取引の氷と炎の歌が演奏され始めています。しかし、明らか...

分散ストレージシステムのデータ分散方法に関する簡単な説明

分散ストレージ システムが直面する主な問題は、大量のデータを異なるストレージ ノードに分散する方法で...

草の根ウェブマスターによるオンライン採用に関する自己反省: ハイエンド採用は誤った提案である

時代の発展とともに、インターネットは私たちの生活においてますます重要な役割を果たしています。インター...

ubserversホストの紹介

UBservers は、高品質のホスティング サービスを提供し、ユーザーの問題を解決することで顧客を...

#黑5# サンノゼ サーバー、月額 299 ドル、2*e5-2683v4、512G DDR4、2*3.84T SSD、10Gbps 帯域幅

SpinServers のブラック フライデーが早くも始まりました。米国西海岸のサンノゼにある超ハイ...

5G時代のもう一つの「爆発的な」アプリケーション、クラウドゲームの未来とは?

5Gは何ができるのか?これは、過去 2 年間、誰もが探求してきた質問です。 4月15日、百度はオンラ...

Cyber​​Bunker - 間違いなく世界で最も強力な違法ホスティングルーム

本当に役に立つ情報がないなら、興味深いコンピュータ室を紹介します。今回の主役はオランダにあるサイバー...

SEOタイトルの最適化:非常に強力に見えます

SEO においてタイトルとはどういう意味でしょうか? 多くの SEO 実践者は、タイトルは検索エンジ...

Taobaoアフィリエイトウェブサイトのキーワードを選択するにはどうすればいいですか?

Taobao であろうと他のウェブサイトであろうと、ウェブサイトのキーワードは非常に重要です。私は ...

Java 啓蒙の道 - Java 仮想マシン

Java仮想マシンの概念Java 仮想マシン (JVM) は、実際のコンピュータと同様に、シミュレー...

tmhhost: ロサンゼルス cn2 gia バックホール + アウトバウンド 200G 高防御 VPS、簡単な評価

数日前、tmhhostのcn2高防御VPSが発売されました(tmhhost:トリプルネットワークcn...

ウェブサイトのランキングを行う際には、SEO計画に注意を払う必要があります

ウェブサイトをランク付けする方法については、以前に紹介しました。私たちが SEO に取り組むとき、最...

垂直型電子商取引はO2Oに頼り、非標準製品の収益モデルは多様化している

レッドスターマカリンオンラインモールとQijia Mallの公式トライアルにより、非標準製品(さまざ...