ホームページ >Java >&#&チュートリアル >JVM学習Javaランタイムデータ領域

JVM学習Javaランタイムデータ領域

零下一度
零下一度オリジナル
2017-06-01 10:32:381471ブラウズ

1. プログラムカウンター

現在のスレッドによって実行されたバイトコードの行番号インジケーター。

2. Java 仮想マシン スタック

はスレッドに対してプライベートであり、スレッドと同じ ライフサイクル を持ちます。 ローカル変数テーブル、オペランドスタック、ダイナミックリンクリスト、メソッド出口およびその他の情報を保存するために使用されます。

ローカル変数テーブルの格納内容:

  • 基本データ型(boolean、byte、char、short、int、float、long、double)

  • オブジェクト参照(定数に格納されるシンボリック参照とは異なります) pool )

  • returnAddress型(バイトコード命令のアドレスを指す)

64ビットlongのlong型とdouble型のデータは2つのローカル変数空間(スロット)を占有し、残りは1つのスロットを占有します。

2 つの例外:

  • StackOverflowError: スレッドによって要求されたスタックの深さ > 仮想マシンによって許可される深さ

  • OutOfMemoryError: 動的拡張中に十分なメモリを適用できません

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

仮想マシン スタックと似ていますが、違いは、ネイティブ メソッド スタックがネイティブ メソッドを提供するのに対し、仮想マシン スタックは Java メソッドを提供することです。

4. Java ヒープ

すべてのスレッドによって共有され、オブジェクト インスタンスと配列を保存します。

「GC ヒープ (ガベージ コレクション ヒープ)」とも呼ばれるガベージ コレクターによって管理されるメイン領域

には、新世代 (Eden スペース、From Survivor スペース、To Survivor スペース) と古い世代が含まれます。

複数のスレッドプライベート割り当てバッファ (スレッドローカル割り当てバッファ、TLAB) を分割できます。

物理的には不連続であっても、論理的には連続である場合があります。

拡張可能: -Xmx および -Xms コントロール。 -Xmx 最大ヒープ メモリ サイズ、-Xms 初期ヒープ メモリ サイズ。

インスタンスの割り当てを完了するために使用可能なメモリがヒープ内になく、拡張できない場合 - OutOfMemoryError

5. メソッド領域 (別名非ヒープ)

もすべてのスレッドで共有され、使用されます。仮想マシンによってロードされた クラス情報、定数、静的変数、ジャストインタイム コンパイラによってコンパイルされたコード、およびその他のデータ を保存します。

「永久世代」とも呼ばれますが、本質的には同等ではありません。

永続世代の上限は -XX:MaxPermSize です。

6. ランタイム定数プール

はメソッド領域の一部です。

7. ダイレクトメモリ

JDK1.4に新たに追加されたNIO(新しい入力/出力)クラスは、ネイティブ関数ライブラリを使用して直接割り当てることができるI/Oメソッドを導入します。ヒープメモリ。 Java ヒープ サイズ (-Xmx) によって制限されないため、各メモリ領域の合計が物理メモリ制限を超え、動的拡張中に OutOfMemoryError が発生する可能性があります。

概要:

  • 3つのメモリ領域1、2、3は各スレッドにプライベートです

  • 4と5はすべてのスレッドに共通です

  • 6は5の一部です

  • 7は仮想ではありません 仮想マシンのメモリ領域外の他の物理メモリに属する​​マシンのランタイム データ領域の一部

  • [関連する推奨事項]

1.

Java コレクション フレームワークの学習メモ

2. Javaランタイムの2種類の計算の紹介 コード例

3. Javaトランザクション管理学習JDBCサンプルコードの詳細解説

以上がJVM学習Javaランタイムデータ領域の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。