3. java 堆和 JVM 内存结构
1. 什么是java堆
Java 堆是 Java 虚拟机(JVM)管理的内存中最大的一块,是所有 Java 线程共享的内存区域。
它是 Java 内存模型中最核心的部分,主要用于存放对象实例和数组。
主要特点 :
- 对象存储:几乎所有通过new关键字创建的对象实例都存储在堆中
- 共享区域:被所有线程共享,需要考虑线程安全问题
- 垃圾回收主要区域:GC(Garbage Collection)主要管理堆内存
- 动态分配:大小可以在JVM启动时指定,运行时可以动态扩展(取决于配置)
2. JVM 内存结构
现代JVM通常将堆划分为以下几个区域:
1. 新生代(Young Generation)
- Eden区:新创建的对象首先分配在这里
- Survivor区(S0和S1):经过Minor GC(垃圾回收)后存活的对象会移动到Survivor区
2. 老年代(Old Generation/Tenured Generation)
- 长期存活的对象最终会晋升到这里
3. 元空间(Metaspace,Java 8+)
- 替代了永久代(PermGen),存储类元数据信息
堆和栈的区别:
特性 | 堆(Heap) | 栈(Stack) |
---|---|---|
存储内容 | 对象实例 | 基本类型变量、对象引用 |
线程共享 | 是 | 每个线程私有 |
内存分配 | 动态 | 固定大小(可通过参数调整) |
垃圾回收 | 是 | 否(随线程结束自动释放) |
空间大小 | 较大 | 较小 |
分配效率 | 相对较慢 | 相对较快 |
Java堆是JVM性能调优的重要区域,合理的堆设置可以显著影响应用程序的性能和稳定性。
上一篇 下一篇