ホームページ >Java >&#&チュートリアル >Java 仮想マシンのメモリ モデルのヒープ構造は何ですか?

Java 仮想マシンのメモリ モデルのヒープ構造は何ですか?

WBOY
WBOYオリジナル
2024-04-13 18:51:02347ブラウズ

JVM ヒープ構造では、ヒープ メモリは世代ごとに管理され、次に若い世代 (Eden、Survivor 0、Survivor 1)、古い世代が続きます。若い世代は新しいオブジェクトの割り当てに使用され、古い世代は長期的なオブジェクトの保存に使用されます。メタスペース (JVM 8 以降) はメタデータの保存に使用されます。実際の例では、プログラムは 2 つのオブジェクトを作成し、ヒープ情報 (合計メモリ、使用可能なメモリ、使用済みメモリ) を出力します。

Java 仮想マシンのメモリ モデルのヒープ構造は何ですか?

Java 仮想マシン メモリ モデルのヒープ構造

Java 仮想マシン (JVM) メモリ モデルのヒープは、特別なメモリ領域であり、使用されます。オブジェクトのインスタンスと配列を保存するために使用されます。これは、若い世代と古い世代に分かれた世代別メモリ管理システムです。

ヒープ構造

若い世代:

  • エデン空間とも呼ばれ、新しいオブジェクトが割り当てられるヒープ内の領域です。 。
  • は、エデン、サバイバー 0、サバイバー 1 の 3 つのパートに分かれています。
  • Eden 領域は、新しいオブジェクトを格納するために使用されます。Eden 領域がいっぱいになると、新しい世代のガベージ コレクションがトリガーされます。

古い世代:

  • 若い世代から生き残った長期オブジェクトを保存するために使用されます。
  • Survivor 領域がいっぱいになると、オブジェクトは古い世代に昇格されます。

メタスペース:

  • JVM 8 以降のバージョンのヒープの一部。クラス情報、メソッド情報などのメタデータ情報を保存するために使用されます。そして一定のプール。

実践的なケース

次の Java コードは、ヒープ構造の使用法を示しています。

public class HeapExample {

    public static void main(String[] args) {
        // 创建新对象,存储在年轻代 (Eden 空间)
        Object object1 = new Object();

        // 触发新生代垃圾收集,将长期对象晋升到老年代
        System.gc();

        // 创建另一个对象,存储在老年代
        Object object2 = new Object();

        // 打印堆信息
        printHeapInfo();
    }

    private static void printHeapInfo() {
        long totalMemory = Runtime.getRuntime().totalMemory();
        long freeMemory = Runtime.getRuntime().freeMemory();

        System.out.println("Total memory: " + totalMemory);
        System.out.println("Free memory: " + freeMemory);
        System.out.println("Used memory: " + (totalMemory - freeMemory));
    }
}

このコードは 2 つのオブジェクトを作成します。最初のオブジェクトはobject1 は若い世代に保存され、2 番目のオブジェクト object2 は古い世代に保存されます。このコードは、合計メモリ、空きメモリ、使用済みメモリなどのヒープ情報も出力します。

以上がJava 仮想マシンのメモリ モデルのヒープ構造は何ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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