すべての Java 開発者は、日常業務や面接で JDK、JVM、GC の問題に遭遇します。この記事では、次の 10 の質問から始まり、JVM のあらゆる側面を包括的に理解できるようにします。
1. JVM、JRE、JDKの違いと関係 これは基本的に、Java の世界への入門レベルの知識認識です。まず、Java 公式サイトからの写真を見てみましょう。 この図から、基本的に「JRE」はJava言語で書かれたプログラムを実行するために不可欠な動作環境であることがわかります。私たちが作成した Java プログラムを実行し、ユーザーが使用できるようにするには、JRE が必要です。 「JDK」は一般に Java 開発キットとして知られており、Java ランタイム環境 JRE (Java ランタイム環境)、一連の Java ツール (javac/java/jdb など)、および Java ベースのクラス ライブラリ (つまり、rt.jar を含む Java API) が含まれています。 しかし、JRE と JDK はどちらも JVM に基づいています。 JVM は、Java プログラムが特定のマシン上で実行されるための最低レベルの保証であると言えます。 2. JVM とは何でしょうか?その主な機能は何ですか? JVM は Java Virtual Machine の略です。その目的は、私たちが作成した Java プログラムを、異なるオペレーティング システムの異なる CPU 上で実行できるようにすることです。私たちが作成する Java プログラムは、開発ツール (Intellij idea など) を使用して .class ファイルにコンパイルされますが、このクラス ファイルはオペレーティング システムによって直接認識され、実行することはできません。コンパイルされた .class ファイルを JVM 仕様に従ってマシン語に変換し、それを CPU に送信してオペレーティング システムで実行する必要があります。 JVM の主な機能を一言で評価すると、JVM は特定のオペレーティング システム プラットフォームに関連する情報をシールドするため、Java プログラムは Java 仮想マシン上で実行されるターゲット コード (バイトコード) を生成するだけで済み、変更なしで複数のプラットフォームで実行できます。 3. このような強力な JVM のコア機能は何ですか? JVM のコア機能は、一般的に次の 3 つの部分に分かれています。
4. JVM クラスの読み込みメカニズムとプロセスは何ですか? まず、開発ツールによってコンパイルされたクラス ファイルが JVM によってどのようにロードされるかについて説明します。いわゆるクラス ローディング メカニズムは、実際には、仮想マシン (JVM) がクラス ファイルをメモリにロードし、その正確性をチェックし、チェックに合格したら解析して初期化し、最後にクラス ファイルをメモリ内で直接使用できる java.lang.Class オブジェクトに変換するというものです。 クラス ファイルのロードから破棄までのライフ サイクルは、基本的に、ロード、リンク (検証、準備、解析)、初期化、使用、アンロードの 5 つの段階に分けられます。
たとえば、上記の静的変数 age の値は初期化後に 10 になります。 ロードフェーズのステップ(2)と(3)では、ランタイムデータ領域、ヒープ、メソッド領域などの用語が見つかります。では、「ランタイム データ領域」とは正確には何であり、その構造コンポーネントは何でしょうか? 5. JVM ランタイム データ領域とは何ですか?そしてその論理構造 「ランタイム データ領域」は、Java プログラムの実行中にメモリを管理する目的で、JVM によってメモリを複数の異なる領域に分割するように設計されています。これらの領域にはそれぞれ独自の用途があります。一部の領域には、仮想マシンと同様のライフサイクルがあります。これらは仮想マシン プロセスの開始時に存在し、仮想マシン プロセスが終了すると消えます。一部の領域は、ユーザー スレッドの開始と終了に応じて作成および破棄されます。詳細は以下の通りです。 方法領域: (1)クラス情報、定数、静的変数、ジャストインタイムコンパイラによってコンパイルされたコード、および仮想マシンによってロードされたその他のデータを格納するために使用されます。 (2)メソッド領域は、すべてのスレッドで共有されるメモリ領域である。同じクラス情報のコピーを 1 つだけロードする必要があるため、仮想マシンの起動時に作成されます。 (3) Java仮想マシン仕様では、メソッド領域はヒープメモリの論理的な一部として説明されていますが、Javaヒープと区別するために「非ヒープ」と呼ばれる別の別名があります。 JDK8 より前では、メソッド領域は Perm スペースと呼ばれていましたが、JDK8 以降では Metaspace (つまりメタデータ領域) と呼ばれています。 ヒープ: Java ヒープはすべてのスレッドで共有され、仮想マシンの起動時に作成されます。このメモリ領域の唯一の目的は、オブジェクト インスタンスを格納することです。 Java 仮想マシン仕様では、すべてのオブジェクト インスタンスと配列はヒープ上に割り当てる必要があると説明されていますが、JIT コンパイラの開発とエスケープ解析技術の段階的な成熟により、スタック割り当てとスカラー置換最適化技術によって微妙な変化が生じ、すべてのオブジェクトがヒープ上に割り当てられるという絶対的な基準は薄れていきます。 Java 仮想マシン スタック: Java 仮想マシン スタックはスレッドに固有またはプライベートであり、スレッドの作成時に作成されます。スレッドの実行状態 (どのメソッドが呼び出されているか) は、このスレッドに対応する仮想マシン スタックによって保存されます。 スレッドによって実行される各メソッドは、仮想マシン スタック内のスタック フレームです。メソッドが呼び出されると、スタック フレームがスタックにプッシュされます。メソッド呼び出しが完了すると、スタック フレームがスタックからポップされます。以下のように表示されます。 プログラム カウンター (Pc レジスタ): JVM プロセスでは複数のスレッドが実行されており、スレッド内のコンテンツが実行権限を持つかどうかは CPU のスケジュールによって決まることは誰もが知っています。スレッド A がどこかで実行中に突然 CPU 実行権を失ってスレッド B に切り替わった場合、スレッド A が CPU 実行権を取り戻したときに、どのようにして実行を継続できるでしょうか?このため、スレッドが実行される場所を記録するために、スレッド内に変数を保持する必要があります。これはプログラムカウンターです。 ネイティブ メソッド スタック: ネイティブ メソッド スタックが果たす役割は、仮想マシン スタックの役割と非常に似ています。それらの唯一の違いは、仮想マシン スタックは仮想マシンに Java メソッド (バイトコード) の実行を提供するのに対し、ネイティブ メソッド スタックは仮想マシンで使用されるネイティブ メソッドを提供するという点です。つまり、現在のスレッドによって実行されるメソッドがネイティブ タイプの場合、これらのメソッドはローカル メソッド スタックで実行されます。 まとめると、JVM の設計仕様によれば、使用の観点から、JVM のメモリは、スレッド専用メモリ領域とスレッド共有メモリ領域に大まかに分けられます。 スレッドプライベートメモリ領域は、クラスローダーがクラスファイルをコンパイルする際に、実行に必要な「プログラムカウンタ」と「仮想スタックフレーム」に必要なスペースを決定するもので、現在の実行スレッドの生成とともに生成され、実行スレッドの消滅とともに消滅します。したがって、「スレッド専用メモリ領域」では、メモリ管理やガベージコレクションの問題を考慮する必要はありません。 スレッド共有メモリ領域は、仮想マシンの起動時に作成され、すべてのスレッドによって共有されます。これは、Java 仮想マシンによって管理されるメモリの中で最も注目に値する最大の領域です。 |
<<: 「数秒で理解できます!」 JVM 仮想マシンの詳細なグラフィックとテキストの説明!全然難しくない
>>: Tencent Cloud TDSQLはFutuのコアシステムをサポートし、ピーク時のクエリ量は1日あたり50億を超える。
データが王様である時代において、膨大なデータの保存、伝送、分析は特に重要になっています。データの保存...
要点:グレーゾーンから始めて、正式な運営に移行して「ロンダリング」を行うことは、近年の中国のインター...
sharktech からの最新ニュース: いくつかの新しいサーバー モデルが追加されました。古いハー...
2018年最もホットなプロジェクト:テレマーケティングロボットがあなたの参加を待っています越境EC企...
クラウド コンピューティングは 20 年近くにわたって発展を続け、クラウド ネイティブの時代に入りま...
Offshorededi はベリーズのホスティング会社で、主な事業はオフショア ホスティング、オフシ...
今日もいつものように百度指数に行って単語をチェックしてみたところ、百度指数が改訂されたことがわかりま...
hostflyte からの最新のプロモーション メール: 7 月 1 日から 1 週間、coresi...
「昨年、フォレスターは、クラウド コンピューティングが世界中の企業のデジタル変革を劇的に加速させると...
紙の文書からデジタルプロセスへの移行は、資源や人件費の削減など、COVID-19パンデミックのような...
調査会社ガートナーの調査によると、多くの企業がコロナウイルスの流行中に業務をクラウドに移行するための...
chicagovps.net は、ダラス、ニューヨーク、シカゴにデータセンターを持つ超安価な独立サー...
2018年最もホットなプロジェクト:テレマーケティングロボットがあなたの参加を待っていますRhino...
ウェブサイトのSEOを行う人なら、PR値について知っていると思います。知らない場合は検索すれば出てき...
[[411100]]序文Java仮想マシンのランタイムデータ領域は面接でよく聞かれます。市場には多く...