ホームページ  >  記事  >  Java  >  JVM メモリ データ領域の詳細な紹介

JVM メモリ データ領域の詳細な紹介

王林
王林転載
2019-11-25 16:08:182665ブラウズ

JVM メモリ データ領域の詳細な紹介

JAVA プログラムは仮想マシン上で実行され、実行時にメモリ領域が必要になります。仮想マシンが JAVA プログラムを実行するとき、仮想マシンが管理するメモリは、管理を容易にするために異なるデータ領域に分割されます。仮想マシン管理メモリ データ領域は、次の図に分割されています。

JVM メモリ データ領域の詳細な紹介

Java 学習ビデオの推奨事項: java オンライン チュートリアル

1. プログラム カウンタ レジスタ

行番号インジケータ、分岐、ループ、ジャンプ、例外処理、バイトコード命令のスレッド リカバリ (CPU スイッチング)、各スレッドには独立したカウンタとスレッド プライベート メモリが必要です。相互に影響を与えないため、この領域ではメモリ オーバーフロー例外は発生しません。

2. 仮想マシン スタック (VM スタック)

仮想マシン スタック (VM スタック) はスレッドに対してプライベートであり、宣言期間はスレッドと同じです仮想マシン スタックはメソッド実行の Java メモリ モデルであり、各メソッドが実行されると、メソッド実行時の基本的なデータ構造であるスタック フレームが作成されます。

スタック フレームは、ローカル変数テーブル、オペランド スタック、ダイナミック リンク、メソッド出口などを格納するために使用されます。各メソッドの実行は、スタックからスタックへの仮想マシン スタック フレームのプロセスに対応します。 。これは、物理層の上のプログラム データ モデルに対応するデータ構造、つまり仮想マシン内のローカル変数テーブルです。

ローカル変数テーブルは、コンパイル中に既知のさまざまなデータ型を格納するデータ モデルを実行するプログラムです。

Boolean、byte、char、short、int、float、long、Double、オブジェクト参照タイプ (オブジェクト メモリ アドレス変数、ポインタ、またはハンドル)。プログラムの実行時には、ローカル変数テーブルに従ってスタック フレーム領域のサイズが割り当てられます。操作中、サイズは変更されません。例外の種類: stackOverFlowError。スレッド要求のスタックの深さが仮想マシンの許容深さを超えています。OutOfMemory メモリ領域が枯渇しているため、拡張できません。

3. ネイティブ メソッド スタック

仮想マシン スタックと同様に、仮想マシン スタックは Java プログラムを提供し、ローカル メソッド スタックは仮想マシンの実行をサポートします。サービスの具体的な実装は仮想マシンの製造元によって決定され、stackOverFlowError および OutOfMemory 例外もスローされます。

4. ヒープ

ヒープは、仮想マシンによって管理されるメモリの最大部分であり、すべてのスレッドによって共有され、オブジェクト インスタンス (オブジェクト)、配列)、物理的に不連続なメモリ空間、GC コレクターは世代ごとに収集するため、新世代 Eden、From SurVivor 空間、To SurVivor 空間、割り当てバッファ (割り当て空間) に分割され、複数に分割される場合があります。スレッドプライベートバッファ、古い世代。

5. メソッド領域

メソッド領域 (メソッド領域) は、ヒープ領域と同様にスレッド共有メモリ領域であり、スレッドによってロードされたデータを格納するために使用されます。仮想マシン クラス情報、定数、静的変数、ジャストインタイム コンパイラ (動的にロードされる OSGI) によってコンパイルされたコード、およびその他のデータ。理論上は Java 仮想マシンの一部ですが、区別するために非ヒープと呼ばれます。

この領域ではガベージ コレクションを実行しないことも選択できます。この領域でのリサイクルの目的は、主に定数プールのリサイクルとクラスのアンインストールです。メモリ領域が不足すると OutOfMemory 例外がスローされます。

実行時定数プール: メソッド領域、クラス バージョン、フィールド、インターフェイス、メソッドなどの一部、およびコンパイル中に生成されるさまざまなリテラルやシンボル参照。これらは、クラスのコンパイル後にこの領域に格納されます。ロードされています。 OutOfMemory 例外がスローされます。

6. ダイレクト メモリ

ダイレクト メモリは、仮想メモリ領域に属さず、チャネルとバッファに基づいた IO 方式であり、ネイティブ関数を使用して、オフヒープ メモリを直接割り当て、参照された外部メモリ アドレスをヒープに保存し、参照を通じて直接参照されたメモリの操作を完了します。1.4 以降に提供された NIO により、効率が大幅に向上し、ヒープ メモリとヒープ メモリ間の往復コピー操作が回避されます。仮想マシンのメモリによって制御されないネイティブ メモリは、OUTOfMemory 例外をスローします。

おすすめの関連記事チュートリアル: Java 開発の入門

以上がJVM メモリ データ領域の詳細な紹介の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事はcsdn.netで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。