パブリック プラットフォームとして、JDK 自体は並行プログラムのパフォーマンスに知恵を絞っており、並行処理中にシステム スループットを提供するために JDK 内であらゆる手段を試してきました。ここでは、JDK 内のいくつかの「ロック」最適化戦略を簡単に紹介します。 1. 方向をロックする ロック バイアスは、ロック操作の最適化手法です。 スレッドがロックを取得すると、ロックはバイアス モードになります。このスレッドが再度ロックを要求する場合、同期操作は必要ありません。これにより、ロック要求操作が大幅に削減され、プログラムのパフォーマンスが向上します。 したがって、ロックの競合がほとんどない状況では、同じスレッドが同じロックを連続して複数回要求する可能性が非常に高いため、バイアス ロックの方が最適化効果は高くなります。ただし、ロックの競争が激しい状況では効果は良くありません。なぜなら、激しい競争の場合、異なるスレッドが毎回同じロックを要求するという状況が最も起こりやすいからです。いくつかの一般的なロックについて詳しくは、ここをクリックしてください。
2. 軽量ロック バイアス ロックが失敗した場合、前回ロックを要求したスレッドはこのスレッドと同じではありません。バイアスをロックできない場合は、同期操作を回避できません。このとき、仮想マシンはスレッドを直ちに中断しません。軽量ロックと呼ばれる最適化を使用します。 軽量ロックの操作も非常に便利です。これは、オブジェクト ヘッダーをポインターとして使用して、Chiyou ロックのスレッド スタックの内部を指し示し、スレッドがオブジェクト ロックを保持しているかどうかを判断します。スレッドが軽量ロックを正常に取得すると、クリティカル セクションにスムーズに入ることができます。軽量ロックが失敗した場合、他のスレッドがロックをプリエンプトしたことを意味し、現在のスレッドのロック要求は重量ロックに拡張されます。いくつかの一般的なロックについて詳しくは、ここをクリックしてください。 3. オプションのロック ロックが拡張された後、スレッドがオペレーティング システム レベルで実際にハングするのを防ぐために、仮想マシンは最大限の努力、つまり自己選択ロックを実行します。現在のスレッドは一時的にロックを取得できないため、いつロックを取得できるかは不明です。おそらく、数 CPU クロック サイクル後にロックを取得できるでしょう。この場合、スレッドを単に一時停止するだけではコストがかかりすぎる操作になる可能性があるため、システムは賭けに出ます。つまり、スレッドが近い将来にロックを取得できると想定します。 したがって、仮想マシンは現在のスレッドに空のループを実行させます。数回のループの後、ロックを取得できれば、クリティカル セクションに正常に入ります。ロックを取得できない場合、スレッドは実際にはオペレーティング システム レベルで中断されます。 4. ロックの除去 ロックの除去は、より徹底したロックの最適化です。 JIT コンパイル中、Java 仮想マシンは実行コンテキストをスキャンして、共有リソースの競合の可能性がないロックを削除します。ロックを排除することで、無意味なロック要求時間を節約できます。 以下の状況では、ベクターを使用し、ベクター内で同期要求ロックを使用します。
V は createStrnigs 関数でのみ使用されるため、単なるローカル変数です。ローカル変数はスレッド スタック上に割り当てられ、スレッド専用のデータであるため、他のスレッドからはアクセスできません。したがって、この場合、Vector 内のすべてのロック同期は不要です。仮想マシンがこの状況を検出すると、これらの無駄なロック操作を削除します。いくつかの一般的なロックについて詳しくは、ここをクリックしてください。 ロック解除に関わる重要な技術はエスケープ解析です。いわゆるエスケープ分析は、変数が特定のスコープから脱出するかどうかを観察することです。この場合、変数 v は明らかに createString 関数をエスケープしません。これに基づいて、仮想マシンは v 内のロック操作を大胆に削除できます。createStrings が String 配列ではなく v 自体を返す場合、変数 v が現在の関数から脱出したと見なされ、v が他のスレッドからアクセスされる可能性があります。この場合、仮想マシンは v 内のロック操作を排除できません。 エスケープ解析は -server モードで実行する必要があります。 -XX:DoEscapeAnalysis パラメータを使用してエスケープ分析をオンにし、-XX:+EliminateLocks パラメータを使用してロック除去をオンにすることができます。 |
<<: [AWS コミュニティディスカッション活動概要 3] クラウドデータベースの長所と短所
>>: 面接でJava仮想マシン(JVM)について質問されたら、この記事を読んでください。
百度の自社製品は自社の子供のようなものです。自分の子供を愛さない親はいません。特に、百度のアルゴリズ...
これは中国で仮想通貨が直面した最も深刻な課題かもしれない。中国人民銀行と他の5つの省庁が12月5日に...
起業家:劉平洋スタートアッププロジェクト: Huaban.comスタートアップ場所:杭州開始時期: ...
ウェブサイトの構造単位はウェブページであり、数百または数千のウェブページコンテンツで構成されています...
[[392389]]分散ロックのシナリオフラッシュセールのシナリオケースフラッシュセールでは、在庫の...
Toutiao Mini Program は、まだ自分に合った開発の道を模索中です。最近、自主メディ...
インターネットには、数え切れないほどのウェブマスターが夢を抱いていた時代がありました。地域性と専門性...
北京時間1月3日早朝、レンタカーサービス会社エイビス・バジェット・グループ(以下、「エイビス」)は本...
HostflyteのCN2 VPS(CN2 GT、片道)が20%オフで販売されています。国内の往路は...
海外ではイースターが近づいており、alpharacks.com の VPS プロモーションも早く到来...
SEOを行う人は、検索エンジンを使い、そして検索エンジンを排除する必要があります。この文は、検索エン...
1. はじめに前回の記事では、Kafka のアーキテクチャモデルについて詳しく紹介しました。クラスタ...
インターネットでプロモーションを成功させる方法最近投稿される記事は、何かを本当に学びたいと思っている...
長い間、SEO について語っていませんでした。基本的に、私を知っている人は、SEO に携わっている人...
容器コンテナ:コンテナは、コンテナ イメージの実行状態です。これは標準のコンテナ ランタイム上で実行...