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

推薦する

photonvps-$5.48/windows/512m メモリ/20g SSD/2T トラフィック/ロサンゼルス/DDoS 保護

皆さんはphotonvpsをご存知でしょうか?それが、みんながFantong VPS(KVM仮想化ベ...

東南アジアにおけるクラウドコンピューティングの発展方向は何ですか?

クラウド コンピューティングが万能薬ではないことを企業が認識するにつれ、新しいスキル、新しいアプリケ...

郡レベルのポータルステーションは、最初のポータルステーションになった場合にのみ開発の機会を得ることができます。

多くの郡レベルのウェブサイトを分析した結果、ほとんどの郡にはまだ市場の可能性が残っていることがわかり...

装飾業界のローカルポータルサイトはどうやって収益を上げるべきでしょうか?

私は小さな都市で地元の装飾ポータルサイトを運営しています。私のサイトである嘉興装飾ネットワーク (h...

コンテナを実行するのにDockerイメージは実際には必要ない

これは少し見出しっぽいですが、コンテナ イメージは単なる組織の rootfs であるというのは本当で...

Taobaoが「新しいパブリックドメイン」をオープンしました。ぜひご覧ください!

1990年代、アメリカのスーパーマーケットは興味深い現象を発見しました。ビールとおむつという一見無関...

Google、国内検索ユーザー向けに検索のヒントを公開

Google の使用中に一時的にアクセスできなくなることがありますか?多くの人がこの問題に遭遇したこ...

UCloudクラウドホストは、ワンクリックでデータセキュリティを制御するためにフルディスク暗号化を独占的に開始しました

UCloud は、クラウド ホストのフルディスク暗号化セキュリティ機能を独占的にリリースします。ユー...

ソフト記事マーケティングの実現可能性について

私たちが生きている時代は、情報が豊富で双方向のコミュニケーションが可能な時代です。さまざまな情報チャ...

ソーシャルeコマース: トラフィックから生まれ、トラフィックに閉じ込められる

Pinduoduo が急成長を続けるにつれ、おそらく人々に認識させたのは、ソーシャル e コマース自...

Office365: パートナーがWin-Winの未来を実現できるよう支援

[51CTO.com からのオリジナル記事] 中国で初の国際品質生産性クラウド プラットフォームがリ...

edgenat: 春節イベント、全品40%割引、香港cn2vps、韓国cn2vps、アメリカcn2vps

edgenat(2009年設立の国内企業、APNIC会員ユニット、ASN139803)では現在、「春...

SAP SuccessFactorsとCapgemini Chinaの人材開発ソリューション合同カンファレンスが11月15日に開催されます

[[208274]]魔法の箱が開かれ、人材管理はかつてないほどシンプルになりましたSAP Succe...

SEO 最適化を行う際、これらの 8 つのポイントを本当に理解していますか?

ショートビデオ、セルフメディア、インフルエンサーのためのワンストップサービスSEO 最適化を長い間続...

有名商家之Arvixe-VPS月付18美元/softlayer無制限流量/送域名/windows

arvixe.com は、11 年の歴史を持つ有名な仮想ホスト プロバイダーで、月額料金は 18 ド...