Aは、JVMが実行されている、それはメモリ空間に分割されます、このスペースはなったランタイムデータ領域。メイン領域には、次のセクションにランタイムデータを分割されます。
1.スタック
各スレッドが起動し、スタック(スレッドスタック)に対応して実行されているであろう、データスタックは、スタックがあるように、そのスレッド、ないリソース共有に固有のスレッドセーフ。
格納されているスタックのスタックフレームのスレッドがメソッドを呼び出すとき、スタックフレームとスタックフレームを形成するために、プッシュ動作は、方法は、実行が完了した後に行われるスタック操作。
スタックフレームが含まれています:現在のクラスの参照方法の定数プールに対応するローカル変数、オペランドスタック、点、本方法は、アドレス情報を返します
2.ネイティブメソッドスタック
ネイティブメソッドスタックおよびスタックのメカニズムは、ことを除いて、似ています:ネイティブメソッドスタックがローカルメソッドを実行中にスタックが、Javaメソッドを実行しています。
地元の方法は、非Java JVM言語の実装を呼び出すための方法の必要性を意味し、
などのC 言語。でJVMの仕様、実装を強化する必要はないネイティブメソッドスタック(例:に分割されなければならないホットスポットネイティブメソッドスタックとスタックを組み合わせた仮想マシン)、および特定の実装(異なるオペレーティングシステム、JVM
特定の実装仕様)と同じではありません。
3.プログラムカウンタ
プログラムカウンタPCは、レジスタすることができ、人気の話は命令主に次の命令のプログラム実行の現在のアドレスをキャッシュするために使用されたキャッシュ、CPUで実行する命令を見つけるために、このアドレスに応じて。このレジスタは、JVM
内部的には、カウンタは、しかし、概念に物理的にではなく、 JVMは同じロジックを達成するために。
4.ヒープ
ストアオブジェクトおよび配列メインヒープメモリはヒープメモリを作成しただけJVM内にある、すべてのスレッドによって共有さは言いました。ヒープメモリオブジェクトのストアインスタンスへの各オブジェクトのインスタンス変数内のスタックが参照されていない、ガベージコレクションが自動的にJavaの回復になります。
変数が参照データ型である場合、変数は、直接スタックメモリに格納された基本データ型である場合、この方法で定義されたローカル変数は、変数の値をヒープメモリに格納されるときに、スタックメモリアドレス参照にのみ記憶されます。
メソッド領域
この方法は、JVMに、メモリの領域が非常に重要な分野であり、ヒープ同じメソッド領域は、複数のスレッドで共有することができます。ロードされたクラスごとに、主要店舗情報
拡張:各ロードされたクラス情報は何の事?
クラス情報は、主にマジックナンバー(かどうかを決定するために含むクラスファイル)、定数プール、それはかどうか、抽象クラスであるかどうかをアクセスフラグ(現在のクラスまたは通常のクラスインターフェース、公衆変性、かどうかを最終的な改変記述情報を .. .... )、フィールド情報テーブルのコレクションは、(どのアクセス修飾子、かどうか、インスタンス変数、または静的変数で使用する最終的な改変および他の記述情報を..... )、メソッドテーブルセット情報(どのアクセス修飾子、かどうか、静的メソッドで使用する最終的かどうか、変更を同期ことがあるかどうか、修正ネイティブメソッド...... など)及び。
クラス追加するときに基づいて、クラスローダー際の負荷をクラスは、ファイルを作成するためにクラスのオブジェクトを、クラスオブジェクトは、上記の情報が含まれています。フォローアップこの基づいている、このクラスのインスタンスを作成するには、クラスオブジェクトから作成。
6.定数プール
定数プールエリアにはメソッドの一部です。ストレージクラスは、定数プールの各クラスオブジェクト擁護のために最も重要な資源、JVMであります