分析から逃れる方法を学ぶことについての記事、yyds!

分析から逃れる方法を学ぶことについての記事、yyds!

[[428823]]

みなさんこんにちは、Bingheです〜〜

JVM の実装では、JVM のパフォーマンスを向上させ、メモリ領域を節約するために、「エスケープ解析」と呼ばれる機能が提供されています。また、この機能は近年の大企業の面接でもよく聞かれる知識ポイントでもあります。今日は、エスケープ分析とは何かについてお話ししましょう。

脱出分析の概念

まずは正式な形でエスケープ分析とは何かを説明しましょう。エスケープ分析とは、ポインターの動的範囲を決定する静的分析であり、プログラム内のどこでポインターにアクセスできるのかを分析します。

JVM のジャストインタイムコンパイルのコンテキストでは、エスケープ分析によって、新しく作成されたオブジェクトがエスケープするかどうかが判断されます。ジャストインタイム コンパイラがオブジェクトがエスケープするかどうかを判断する基準は、1 つはオブジェクトがヒープ (ヒープ内のオブジェクトの静的フィールドまたはインスタンス フィールド) に格納されているかどうか、もう 1 つはオブジェクトが不明なコードに渡されるかどうかです。

これらの概念を直接説明するのは少し混乱するので、2つの例を見てみましょう。

オブジェクトエスケープの例

典型的なオブジェクト エスケープは、オブジェクトがメンバー変数または静的変数にコピーされ、外部で使用される可能性がある場合で、その時点で変数がエスケープされます。

この現象を表すには次のコードを使用できます。

  1. /**
  2. * @著者 ビンヘ
  3. * @description オブジェクトエスケープの例 1
  4. */
  5. パブリッククラスObjectEscape {
  6. 個人ユーザー ユーザー;
  7. パブリックvoid init(){
  8. ユーザー= 新しいユーザー();
  9. }
  10. }

ObjectEscape クラスには、メンバー変数 user があります。 init() メソッドでは、User クラスのオブジェクトを作成し、それをメンバー変数 user に割り当てます。この時点で、オブジェクトはメンバー変数にコピーされ、外部で使用される可能性があるため、変数はエスケープされます。

もう 1 つの一般的なシナリオは、オブジェクトが return ステートメントを通じて返されることです。オブジェクトが return ステートメントを通じて返される場合、プログラムはそのオブジェクトが後で使用されるかどうかを確認できません。外部スレッドが変数にアクセスでき、オブジェクトがエスケープされます。

この現象を表すには次のコードを使用できます。

  1. /**
  2. * @著者 ビンヘ
  3. * @description オブジェクトエスケープの例 2
  4. */
  5. パブリッククラスObjectReturn{
  6. 公共 ユーザーcreateUser(){
  7. ユーザー ユーザー= 新しいユーザー();
  8. 戻る ユーザー;
  9. }
  10. }

これら 2 つの例を見ると、JVM エスケープ分析についてある程度理解できたと思います。はい、JVM はエスケープ解析を通じて新しいオブジェクトの使用範囲を分析し、新しいオブジェクトをヒープ上に割り当てるかどうかを決定できます。

まだ終わってませんよ。エスケープ分析をより深く理解できるように、エスケープ分析の利点について引き続き見ていきましょう。

エスケープ分析の利点

エスケープ解析の利点は、一般的に、オブジェクトをスタック上に割り当て可能、オブジェクトまたはスカラーの置き換えが分離可能、同期ロックが排除される、という 3 つのカテゴリに分けられます。これを表すには次の図を使用します。

オブジェクトはスタック上に割り当てられる可能性がある

JVM はエスケープ解析を通じて新しいオブジェクトの使用範囲を分析し、オブジェクトをスタック上に割り当てる場合があります。スタック割り当てにより、オブジェクトをヒープ領域に割り当てることなく、スタック フレーム上のオブジェクトをすばやく作成および破棄できるため、JVM ガベージ コレクションの負荷を効果的に軽減できます。

オブジェクトまたはスカラーの置換を切り離す

JVM がエスケープ分析を通じてオブジェクトをスタックに割り当てる必要があると判断すると、ジャストインタイム コンパイラはオブジェクトを分割し、非常に小さなローカル変数に置き換えることができます。この分解プロセスをスカラー置換と呼びます。オブジェクトをローカル変数に置き換えた後、スタック上に簡単に割り当てることができます。

同期ロックの除去

JVM がエスケープ分析によってオブジェクトにアクセスできるのは 1 つのスレッドからのみであると判断した場合、オブジェクトにアクセスするときに同期ロックは必要ありません。プログラムで同期ロックが使用されている場合、JVM は同期ロックを削除します。

ここで、この状況は同期ロックに適用されますが、JVM は Lock ロックを排除できないことに注意してください。

同期の排除を有効にするには、-XX:+EliminateLocks パラメータを追加する必要があります。このパラメータはエスケープ分析に依存するため、-XX:+DoEscapeAnalysis オプションも有効にする必要があります。

したがって、すべてのオブジェクトと配列がヒープ上に割り当てられるわけではありません。ジャストインタイムコンパイルが存在するため、JVM が一部のオブジェクトにエスケープ メソッドがないことを検知すると、それらのオブジェクトはスタックに割り当てられるように最適化される可能性が高くなります。

派生した面接の質問

実際、いくつかの典型的な面接の質問は、エスケープ分析から派生します。たとえば、「Java のオブジェクトは必ずヒープ上に割り当てられますか?」脱出分析の原則を完全に理解していれば、この種の面接の質問に答えるのは非常に簡単です。

面接の質問について

Java のオブジェクトは常にヒープ上に割り当てられますか?

インタビュアーはこの質問をしました。エスケープ解析について知らない人の中には、Java を学んだ当初から、Java のオブジェクトはヒープ上に作成され、オブジェクト参照はスタックに格納されるので、Java のオブジェクトはヒープ上に割り当てられるのだ、と考える人もいるでしょう。そうじゃない?

このように答えるとそのまま合格になります。

今日は、エスケープ分析とは何かを紹介した後、この面接の質問に完璧に答える方法がわかると思います。

面接の質問に対する回答のアイデア

一般的に、この質問には次のように答えることができます。Java のオブジェクトは必ずしもヒープ上に割り当てられるわけではありません。これは、JVM がエスケープ解析を通じて新しいオブジェクトの使用範囲を分析し、これを使用してオブジェクトをヒープ上に割り当てるかどうかを決定できるためです。

はい、今日はこれで終わりです。私はビンヘです。また次回お会いしましょう〜〜

この記事はWeChatの公開アカウント「Glacier Technology」から転載したものです。下のQRコードからフォローできます。この記事を転載する場合は、Glacier Technology 公式アカウントまでご連絡ください。

<<:  企業がクラウドコンピューティングを通じて持続可能な開発目標を達成する方法

>>:  クラウドコストの最適化: クラウドコンピューティング戦略の重要な部分

推薦する

ソーシャルプルーフマーケティングで高いコンバージョン率を生み出す方法

インターネットの継続的な発展に伴い、インターネット上には多くの新しいものや製品が登場しています。これ...

リスク技術の次のフロンティアはクラウドにあるはずだ

ロジックゲートのCEO、マット・クンケル氏は、従来のガバナンス、リスク、コンプライアンスが過去のもの...

パブリッククラウドからソフトウェア定義データセンターまで、マイクロソフトがハイブリッドクラウド攻勢を開始

ソフトウェア定義データセンターの分野では、VMware は近年最大のソフトウェア サプライヤーとなっ...

世界初! Crane は、コストを削減し効率を高める FinOps 向けの最初の認定オープンソース ソリューションになります。

ちょうど今、Tencent Cloud のオープンソース プロジェクト Crane (クラウド リソ...

2013 年の Baidu の新しいアルゴリズムは SEO 業界にとって障害となるでしょうか?

青大根はリンク仲介市場全体を攻撃しました。有名なリンクプラットフォームである阿里巴巴がK-edされた...

高品質なソフト製品に求められる条件

ウェブサイトを運営したりブログを書いたりしている友人の多くが、よく次のような質問をします。「良いソフ...

8月ももうすぐ終わりますが、他に見る価値のあるもの(退屈なもの)はありますか?

8月以来、Host Catは37の記事を公開しました(この記事を含む)。ここでは、家庭内の兄弟が注目...

デスクトップクラウド: 技術的現状と業界のシナリオ

デスクトップ クラウド ソリューションは、フロントエンドとバックエンドのソフトウェアとハ​​ードウェ...

#BlackFriday# ドメイン名の登録と更新、SSL 証明書に関する情報がすべて 1 つの投稿にまとめられています。

毎年恒例のブラックフライデー・ゴールデンウィークは、ドメイン名やSSL証明書などを購入するのに最も安...

プラットフォームはHadoop分散ファイルシステムをサポート

Platform Computing (以下、Platform) は最近、Apache Corpor...

racknerd: クリスマスセール、特別な高トラフィック VPS、年間 12 ドルから、ハイブリッド サーバーの 50% オフ プロモーション

今年はクリスマス、外国商人によるプロモーションの最後の波です。 Racknerd は、クリスマス向け...

クラウドコンピューティングは「星を見上げる」ことから「地に足をつけた」ものへと進化しました

[51CTO.comより引用] 昨今、クラウドコンピューティングは前半期を終え、後半期に入ったと言わ...

nexusbytes: 日本の VPS (China Telecom、China Unicom、NTT、China Mobile Direct Connect)、年間 38 ドル、1G メモリ/1 コア (AMD Ryzen)/15g NVMe/500g トラフィック

Nexusbytesは新たに7番目のデータセンター(東京、日本)を開設し、日本のVPSを正式に販売開...

中小企業がマーケティングに協力するにはどうすればいいでしょうか?

マーケティングの世界では、どこでも見かける言葉があります。それは「強力な提携」です。しかし、この4つ...

中間レビュー: 2022 年に注目を集める Kubernetes スタートアップ 10 社

Kubernetes は、2014 年に Google が複数のクラスターとデバイス上で何千ものジョ...