以Java 8为背景,系统、清晰地为你讲解JVM(Java Virtual Machine)运行时数据区的各个组件分别存储什么内容,并重点剖析堆(Heap)的作用,辅以实际代码说明。
一、Java 8 中 JVM 内存结构概览
在Java 8中,JVM 的运行时数据区主要包括以下五个部分:
- 堆(Heap) ✅(核心,对象存储区)
- 方法区(Method Area) → 被「元空间(Metaspace)」取代
- Java 虚拟机栈(Java Virtual Machine Stack)
- 本地方法栈(Native Method Stack)
- 程序计数器(Program Counter Register)
⚠️ 关键变化:Java 8 移除了永久代(PermGen),引入了元空间(Metaspace),使用本地内存(Native Memory)而非 JVM 堆内存来存储类元数据。
二、各组件详解(以 Java 8 为准)
1. 堆(Heap) —— 对象的“主战场”
- 线程共享。
- 几乎所有通过
new创建的对象实例和数组都分配在堆上。 - 是 垃圾回收(GC)的主要区域。
- 分为:
- 新生代(Young Generation):Eden + Survivor S0/S1
- 老年代(Old Generation)
✅ 堆中存储的内容:
- 普通对象(如
new Person()) - 数组(如
new int[10]) - 包装类对象(如
new Integer(10)) - 字符串对象(包括字符串