ホームページ  >  記事  >  Java  >  Java 仮想マシンによって管理されるメモリ ランタイム データ領域の詳細な紹介

Java 仮想マシンによって管理されるメモリ ランタイム データ領域の詳細な紹介

黄舟
黄舟オリジナル
2017-03-30 10:42:421488ブラウズ

この記事では、Java 仮想マシンによって管理されるメモリ ランタイム データ領域の詳細な説明に関する関連情報を主に紹介します。必要な方は参照してください

Java 仮想マシンによって管理されるメモリ ランタイム データ領域の詳細な説明

概要

Java プログラムの実行中、Java 仮想マシンは管理するメモリをいくつかの異なるデータ領域に分割します。これらの領域には独自の目的があり、作成および破棄のタイミングも異なります。仮想マシンのプロセスの開始とともに存在する領域もあれば、ユーザー スレッドの開始と終了に応じて作成および破棄される領域もあります。

プログラムカウンター

プログラムカウンターは、現在のスレッドによって実行されるバイトコードの行番号インジケーターと見なすことができます。仮想マシンの概念 モデル では、バイトコード インタープリターは、このカウンターの値を変更して、実行する次のバイトコード命令、分岐、ループ 、ジャンプ、例外処理 、スレッドなどの基本機能を選択することによって機能します。リカバリを完了するにはこのカウンタに依存する必要があります。 スレッドが Java メソッドを実行している場合、このカウンターは実行中の仮想マシンのバイトコード命令のアドレスを記録します。スレッドがネイティブ メソッドを実行している場合、カウンターの値は空です。このメモリ領域は、Java 仮想マシン仕様で OurOfMemoryError 条件が指定されていない唯一の領域です。

仮想マシンスタック

プログラムカウンターと同様に、Java仮想マシンスタックもスレッドに対してプライベートであり、その

ライフサイクル

はスレッドと同じです。仮想マシン スタックは、Java メソッド実行のメモリ モデルを記述します。各メソッドが実行されると、ローカル 変数テーブル、オペランド スタック、ダイナミック リンク、メソッド出口などの情報を保存するためのスタック フレーム (スタック フレーム) が作成されます。各メソッドの呼び出しから実行完了までの処理は、スタックフレームを仮想マシンのスタックにプッシュしてからポップアウトするまでの処理に相当します。 ローカル変数テーブルには、さまざまな基本的な

データ型

(boolean、byte、char、short、int、float、long、double)、オブジェクト参照 (Object Reference)、およびコンパイル時に認識されるバイトコード命令アドレス (returnAddress) が格納されます。 。 Java 仮想マシンの仕様では、この領域に対して 2 つの例外条件が指定されています。スレッドによって要求されたスタックの深さが仮想マシンによって許可される深さよりも大きい場合、仮想マシンのスタックが許可されている場合は StackOverflowError 例外がスローされます。動的に拡張される場合、拡張時に十分なメモリを割り当てることができない場合、OutOfMemoryError 例外がスローされます。

32 ビット jvm のデフォルト サイズは 256 kb ですが、64 ビット jvm のデフォルト サイズは 512 kb です。 -Xss を通じて仮想マシン スタックの最大値を設定できます。ただし、設定が大きすぎると、作成できるスレッドの数に影響します。

メソッド領域

メソッド領域は、Java ヒープと同様に、各スレッドによって共有されるメモリ領域であり、クラス情報、定数、静的変数、ジャストインタイム コンパイラによってコンパイルされたコードを格納するために使用されます。仮想マシンによってロードされたその他のデータ。

Java 仮想マシンの仕様によれば、メソッド領域がメモリ割り当て要件を満たせない場合、OutOfMemoryError 例外がスローされます。

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

ネイティブ メソッド スタックは、仮想マシン スタックと非常に似た役割を果たします。違いは、仮想マシン スタックが仮想マシンに Java メソッドを実行させるのに対し、ローカル メソッド スタックは仮想マシンに機能させることです。ネイティブ メソッド サービスが使用されます。

Java ヒープ

Java ヒープ (Java ヒープ) は、Java 仮想マシンによって管理される最大のメモリ領域であり、仮想マシンの起動時に作成されます。目的はオブジェクト インスタンスを保存することだけであり、ほとんどすべてのオブジェクト インスタンスがここにメモリを割り当てます。

Java ヒープはガベージ コレクション管理の主要な領域であるため、「GC」ヒープと呼ばれることがよくあります。

Java 仮想マシンの仕様によれば、Java ヒープは、ディスク領域と同様に、論理的に連続している限り、物理的に不連続なメモリ領域に存在することができます。実装時には、固定サイズまたはスケーラブルとして実装できます。ただし、現在の主流の仮想マシンはすべてスケーラブルとして実装されます。 (-Xmx および -Xms によって制御) ヒープ内にインスタンスの割り当てを完了するためのメモリがなく、ヒープを拡張できなくなった場合、OutOfMemoryError 例外がスローされます。

以上がJava 仮想マシンによって管理されるメモリ ランタイム データ領域の詳細な紹介の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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