みなさんこんにちは、Bingheです〜〜 JVM の実装では、JVM のパフォーマンスを向上させ、メモリ領域を節約するために、「エスケープ解析」と呼ばれる機能が提供されています。また、この機能は近年の大企業の面接でもよく聞かれる知識ポイントでもあります。今日は、エスケープ分析とは何かについてお話ししましょう。 脱出分析の概念まずは正式な形でエスケープ分析とは何かを説明しましょう。エスケープ分析とは、ポインターの動的範囲を決定する静的分析であり、プログラム内のどこでポインターにアクセスできるのかを分析します。 JVM のジャストインタイムコンパイルのコンテキストでは、エスケープ分析によって、新しく作成されたオブジェクトがエスケープするかどうかが判断されます。ジャストインタイム コンパイラがオブジェクトがエスケープするかどうかを判断する基準は、1 つはオブジェクトがヒープ (ヒープ内のオブジェクトの静的フィールドまたはインスタンス フィールド) に格納されているかどうか、もう 1 つはオブジェクトが不明なコードに渡されるかどうかです。 これらの概念を直接説明するのは少し混乱するので、2つの例を見てみましょう。 オブジェクトエスケープの例典型的なオブジェクト エスケープは、オブジェクトがメンバー変数または静的変数にコピーされ、外部で使用される可能性がある場合で、その時点で変数がエスケープされます。 この現象を表すには次のコードを使用できます。
ObjectEscape クラスには、メンバー変数 user があります。 init() メソッドでは、User クラスのオブジェクトを作成し、それをメンバー変数 user に割り当てます。この時点で、オブジェクトはメンバー変数にコピーされ、外部で使用される可能性があるため、変数はエスケープされます。 もう 1 つの一般的なシナリオは、オブジェクトが return ステートメントを通じて返されることです。オブジェクトが return ステートメントを通じて返される場合、プログラムはそのオブジェクトが後で使用されるかどうかを確認できません。外部スレッドが変数にアクセスでき、オブジェクトがエスケープされます。 この現象を表すには次のコードを使用できます。
これら 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 公式アカウントまでご連絡ください。 |
<<: 企業がクラウドコンピューティングを通じて持続可能な開発目標を達成する方法
>>: クラウドコストの最適化: クラウドコンピューティング戦略の重要な部分
電子商取引は、間違いなく 2012 年の産業経済で最も輝く星です。世界的金融危機と中国の経済成長の鈍...
usshosting は非常に新しい VPS 販売業者です。公式には 2009 年に設立されました。...
海外メディアの報道によると、質の低いウェブサイトがGoogle検索で上位に表示される方法の一つは、一...
完全なクラウドネイティブの時代において、クラウドイノベーションは加速しています。 11月30日、テン...
2018年最もホットなプロジェクト:テレマーケティングロボットがあなたの参加を待っています多くの人が...
Argo Rollouts は、Kubernetes Operator 実装であり、ブルーグリーン、...
インターネットの発展は、ウェブマスター業界の発展につながりました。あらゆる側面からの統計はウェブサイ...
外部リンク構築は、実際には中小企業や個人のウェブマスター向けの外部リンク構築に関するものです。大規模...
Tencent Cloud は、コンピューティング パフォーマンスが大幅に向上し、仮想化の可用性と製...
VeeroTech Systems, LLC は完全に民営化されたアメリカの企業で、2010 年に設...
オンラインプロモーションとカードゲームは、私が毎日行っていることです。まずはカードについてお話ししま...
2014 年になっても、あなたの Web サイトの記事がまだコピー アンド ペーストされ、付加価値が...
今年6月以来、中小規模のウェブマスターのウェブサイトの主なトラフィックソースであるBaiduは、多く...
Racknerd はアメリカの会社です。すべての情報は透明で、検索可能です。そのボスはおなじみの「ダ...
今日の現代企業は、常に変化する脅威の状況とますます高度化するサイバー攻撃に直面しています。組み込むこ...