1. JVM の主な構造は次のとおりです:
2. 各領域の機能の紹介
1)、メソッド領域:
( 1) 仮想マシンによってロードされるクラス情報を保存するために使用され、定数、静的変数などは、各スレッドによって共有されるメモリ領域です。 (2) デフォルトの最小値は 16MB、最大値は 16MB です。値は 64MB で、-XX:PermSize および -XX:MaxPermSize パラメーターによってメソッド領域のサイズが制限されます
(3) 主に使用されるメソッド領域ランタイム定数プール
の一部もあります。コンパイル中に生成されたリテラルとシンボルを保存するためreferences 、String の intern メソッドなど、実行時に定数を生成することもできます。 (4) Java ヒープと同様に、連続メモリを必要とせず、固定サイズまたは拡張可能で、ガベージ コレクションを実装しないことも選択できます。 2)、スタック:
(1) Java 仮想マシンのスタックはスレッドプライベートで、ライフサイクル
はスレッドと同じです。(2) 各メソッドが実行されると、同時にスタック フレームが作成され、ローカル変数テーブル、演算スタック、ダイナミック リンク、メソッド出口などの情報を格納するために使用されます。各メソッドの実行は、スタックフレームのスタックへの出入りに対応します。
(3) JVM 仮想マシン スタックのローカル変数テーブルには、コンパイル時に既知のさまざまな基本的なデータ型
が格納されます。ローカル変数テーブルに必要なスペースは、コンパイル時に割り当てられます。 (4) スタック フレームは、メソッド実行時の基本的なデータ構造です。 (1) ローカル メソッド スタックは、JVM 仮想マシンによって使用されるネイティブ メソッドを提供します。4)、ヒープ:
(1) Java 仮想マシンによって管理される最大のメモリ部分。(2) Java ヒープは、すべてのスレッドで共有される領域であり、仮想マシンの起動時に作成されます。
(3) メモリ領域の唯一の目的は、オブジェクト
インスタンスを保存することです。すべてのオブジェクト インスタンスと配列
はヒープ上にメモリを割り当てられます。(4) Java ヒープは、主に JVM ガベージ コレクション機構によって管理されるメモリ領域です。Java ヒープは、メモリ内の不連続なメモリ空間に存在することができます。
5)、プログラムカウンター:
(1) 比較的小さいメモリ空間、その機能は現在のスレッドによって実行されるバイトコードの行番号インジケーターと見なすことができます
(2) バイトコードの説明 プログラマが作業するとき、このカウンターの値を変更することで、次のバイトコード命令と実行する分岐を選択します。ループ、ジャンプ、例外処理、スレッド回復などはすべてプログラムカウンターに依存する必要があります。
6)、ランタイム定数プール:
(1) ランタイム定数プールはメソッド領域の一部です。 L (2) aClass
ファイルには、型、フィールド、メソッドインターフェイスの説明、その他の情報などの情報に加えて、コンパイルによって生成されたさまざまな型やシンボル参照を格納するために使用される定数プールもあります。コンテンツのこの部分は、クラスがロードされた後、メソッド領域のランタイム定数プールに保存されます。 7)、ダイレクトメモリ:
Java では NIO が導入され、チャネルとバッファの IO メソッドが導入されたため、ネイティブ メソッドを呼び出してオフヒープ メモリを直接割り当てることができます。このオフヒープ メモリはネイティブ メモリであり、ヒープ メモリ サイズには影響しません。
関連記事:
Java仮想マシンについての深い理解 Java仮想マシン学習 - クラスロードメカニズムJava仮想マシン学習 - オブジェクトのメモリ割り当てとリサイクルJava仮想マシン学習- オブジェクトアクセス以上がJava仮想マシンの詳しい説明の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。