Java 仮想マシンのメモリ領域は、Java アプリケーションの実行時に含まれるさまざまなプログラムの実行に使用される実行時領域です。JVM のメモリ領域は、メソッド領域、ヒープ領域、スタック、プログラム カウンタ (PC) レジスタ領域、およびネイティブ メソッド領域。この記事では、Java のさまざまな種類のメモリについて説明します。
広告 このカテゴリーの人気コース JAVA マスタリー - スペシャライゼーション | 78 コース シリーズ | 15 回の模擬テストご存知のとおり、Java はオブジェクト指向言語です。したがって、Java で作成されたすべてのオブジェクトは JVM (Java 仮想マシン) に保存されます。 JVM メモリは基本的に次の部分に分割されます:
すべての実行スレッドは、JVM メモリ領域のこの部分を共有します。定数プール、クラス フィールド、コンストラクター コード、メソッド コードなどのクラス要素。メソッド領域はヒープ領域の一部と考えることができますが、クラスごとのデータのみを保存します。メソッド領域はクラスレベルの情報を保持する責任があると言えます。
Java のヒープ メモリは、Java プログラムの実行中にオブジェクトとクラスにメモリを割り当てるために Java ランタイムによって使用されます。 Java でオブジェクトが作成されると、そのオブジェクトはヒープ メモリに格納されます。ガベージ コレクション プロセスはヒープ メモリ上で実行され、不要な領域を解放します。ガベージ コレクションでは、参照のないヒープ領域からオブジェクトが削除されます。 Java のヒープ メモリは次の部分に分割されます:
Java ヒープ メモリに関する重要なポイントをいくつか示します:
名前が示すように、スタック メモリは LIFO (後入れ先出し) 原理に基づいています。スタック メモリは静的メモリの割り当てに使用され、Java プログラムの実行スレッドごとに独自のスタック メモリがあります。 Java メソッドが呼び出されるたびに、ローカル変数または中間変数とメソッド内の他のオブジェクトへの参照を保持する新しいブロックが Java スタック メモリ内に作成されます。メソッドの実行が完了するとすぐに、スタック内のメモリ ブロックが空になり、次のメソッドで使用されます。スタック メモリのサイズは、ヒープ メモリに比べて小さくなります。ここでは、スタック メモリの重要な機能をいくつか紹介します。
pc レジスタの主な機能は、現在命令を実行しているアドレスを保存することです。また、現在の命令の実行を担当するスレッドのアドレスも保存されます。 PC レジスタに割り当てられるメモリのサイズは非常に小さいです。 JVM で実行される Java アプリケーションは、PC レジスタ メモリやその内容に影響を与えません。
この領域は Java 以外の言語を使用して実装されています。新しいスレッドを作成すると、作成されたスレッドごとにこの領域にメモリが割り当てられます。ネイティブ領域のサイズは固定または動的にすることができます。
次に、メモリがどのように割り当てられるかを示す Java の例を見てみましょう。
コード:
package com.edubca.javademo; class StudentData { int rollNumber; String name; public StudentData(int rollNumber, String name) { super(); this.rollNumber = rollNumber; this.name = name; } public int getRollNumber() { return rollNumber; } public void setRollNumber(int rollNumber) { this.rollNumber = rollNumber; } public String getName() { return name; } public void setName(String name) { this.name = name; } } public class Main { public static void main(String[] args) { int id = 11; String name = "Yash"; StudentData s = null; s = new StudentData(id, name); System.out.println("Student Id is " + s.getRollNumber()); System.out.println("Student Name is " + s.getName()); } }
出力:
メモリ割り当て:
次に、上記のプログラムでメモリがどのように割り当てられるかを見ていきます。
以上がJava のメモリの種類の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。