Java 的内存分配主要由 JVM(Java 虚拟机) 来管理,核心目标是:自动分配内存、自动回收不再使用的内存(GC)。下面从整体结构到具体分配方式给你讲清楚。
Java 内存通常分为以下几部分(以 HotSpot 为例):
程序计数器(PC Register)
Java 虚拟机栈(JVM Stack)
本地方法栈(Native Method Stack)
堆(Heap) ✅(最重要)
方法区(Method Area / 元空间)
Person p = new Person();
分配过程:
类加载检查
分配内存
初始化零值
设置对象头
执行构造方法(
JVM 会做 逃逸分析:
void test() {
User u = new User(); // 可能栈分配
}
static int a = 10;
final int b = 20;
static 变量 → 方法区(元空间)final 常量 → 常量池| 问题 | 原因 |
|---|---|
| StackOverflowError | 栈深度过大(递归) |
| OutOfMemoryError: Java heap space | 堆内存不足 |
| Metaspace OOM | 类加载过多 |
Java 的内存分配由 JVM 统一管理:对象主要在堆中分配,局部变量在栈中,类信息在方法区;通过逃逸分析和 TLAB 等机制提升效率,并由 GC 自动回收。
如果你愿意,我也可以:
你想看哪一种?
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。