SF インタビューの質問: Java メモリ モデルを理解していますか?
360 インタビューの質問: プログラム メモリの配布、5 つの部分
(学習ビデオの共有:Java 教育ビデオ)
1. Java プログラムの実行プロセス
Java ソース コード ファイル (.java サフィックス) は、Java コンパイラによってバイトコード ファイル (.class サフィックス) にコンパイルされ、 JVM によって使用されるクラス ローダーは、各クラスのバイトコード ファイルをロードし、ロードが完了すると、JVM 実行エンジンに渡されて実行されます。プログラムの実行プロセス全体で、JVM はプログラムの実行中に必要なデータと関連情報を保存するスペースを使用します。このスペースは一般にランタイム データ領域と呼ばれ、これが JVM のメモリと呼ばれるものです。したがって、Java でよく話題になるメモリ管理は、この領域を管理すること (メモリ領域の割り当てと再利用の方法) です。
(より関連したインタビューの質問に関する推奨事項:java インタビューの質問と回答)
2. ランタイム データ領域にはどのような部分が含まれますか:
メソッド領域:
#メソッド領域は各スレッドが共有するメモリ領域であり、スレッドによって読み込まれたクラス情報、定数、静的情報を格納するために使用されます。仮想マシン、変数、ジャストインタイム コンパイラによってコンパイルされたコード、およびその他のデータ。メソッド領域がメモリ割り当て要件を満たせない場合、OutOfMemoryError 例外がスローされます。
メソッド領域には、クラスのバージョン、フィールド、メソッド、インターフェイス、および定数プールが格納されます。定数プールには、リテラル参照とシンボリック参照が格納されます。シンボル参照には、1. クラスの完全修飾名、2. フィールド名と属性、3. メソッド名と属性が含まれます。
JVM ヒープ (Java ヒープ):
Java ヒープは、スレッドによって共有されるメモリ領域でもあり、仮想マシンの起動時に作成され、仮想マシンによって管理されます。 Java 仮想マシン。最大のメモリで、主にオブジェクト インスタンスの保存に使用されます。ほとんどすべてのオブジェクト インスタンスがここにメモリを割り当てます。Java ヒープはガベージ コレクタによって管理されるメイン領域であるため、GC ヒープと呼ばれることが多いことに注意してください。ヒープ内にあります インスタンスの割り当てに使用できるメモリがなく、ヒープを拡張できない場合、OutOfMemoryError 例外がスローされます。
プログラム カウンタ レジスタ:
バイトコード インタプリタが動作しているとき、このカウンタの値を変更することによって、実行する必要がある次のバイトコードを選択します。 、ループ、ジャンプ、例外処理、スレッド回復、その他の基本的な機能はすべて、このカウンターに依存して完了する必要があります。
マルチスレッドでは、スレッド切り替え後に正しい実行位置を復元するために、各スレッドが独立したプログラム カウンタを持つ必要があります。各スレッドは互いに影響を与えず、独立して保存されます。そのため、このメモリはスレッド プライベートとなります。 。
仮想マシン スタック (Java 仮想マシン スタック):
Java 仮想マシン スタックもスレッドに対してプライベートであり、そのライフサイクルはスレッドと同じです。 。仮想マシン スタックは、Java メソッド実行のメモリ モデルを記述します。各メソッドが実行されると、ローカル変数テーブル、オペランド スタック、ダイナミック リンク リスト、メソッド終了情報などを格納するスタック フレームが作成されます。各メソッドの呼び出しから実行完了までの処理は、スタックフレームを仮想マシンのスタックにプッシュしてからポップアウトするまでの処理に相当します。
ネイティブ メソッド スタック:
ローカル メソッド スタックは、スレッドのプライベート データ領域に属します。この部分は主に、仮想マシンによって使用されるネイティブ メソッドに関連します。通常、 , この辺は気にする必要はありません。
(関連する推奨事項:
Java 入門チュートリアル)
以上がJava インタビュー記憶モデルの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。