Java 虚拟机内存模型中的堆结构
Java 虚拟机 (JVM) 内存模型中的堆是一种特殊的内存区域,用于存储对象实例和数组。它是一个分代式内存管理系统,分为年轻代和老年代。
堆结构
年轻代:
- 又称为 Eden 空间,是堆中分配新对象的区域。
- 被分为三个部分:Eden、Survivor 0 和 Survivor 1。
- 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));
}
}
这段代码创建了两个对象,其中第一个对象 object1
存储在年轻代,而第二个对象 object2
存储在老年代。代码还会输出堆信息,包括总内存、可用内存和已用内存。