
🌈 个人主页: Hygge_Code
🔥 热门专栏:从0开始学习Java | Linux学习 | 计算机网络
💫 个人格言: "既然选择了远方,便不顾风雨兼程"

文章目录
栈中存的是指针还是对象?
-
堆栈说明:在JVM内存模型中,栈 主要管理线程的局部变量与方法调用上下文;堆用于存储所有对象实例与数组。
-
解释:
- 栈中存储的是:基本类型的值 + 对象的引用(地址/指针),绝不存储完整对象
- 因此,栈中存的不是对象,而是指向对象的引用。
例如MyObject obj = new MyObject(),obj是栈上的引用(64位机占8字节),真正的对象实例在堆中。
堆分为哪几部分?
Java堆是JVM内存管理核心区域,专门存放对象实例与数组。
堆的主要划分如下:

-
新生代(Young Generation)
分为
Eden与Survivor(S0 + S1)。新对象优先在 Eden 分配;Eden 满后触发 Minor GC 。
存活对象进入 Survivor,S0 和 S1 交替使用,用于筛选短命对象。
-
老年代(Old/Tenured Generation)
多次 Minor GC 后仍然存活的对象,会晋升到老年代。
老年代 GC 称为 Major GC ,频率低、速度慢,常常伴随 Full GC。
-
元空间(Metaspace)
JDK8+ 用元空间替代永久代,存储类元数据、方法信息、常量池等。
元空间不在堆里,使用本地内存,大幅减少 OOM 概率。 -
大对象区(Humongous Objects)
G1 收集器特有:超过 Region 一半大小 的对象即为大对象。
直接分配在连续区域,逻辑上属于老年代,避免在 Survivor 间复制带来巨大开销。
如果我的内容对你有帮助,请 点赞 , 评论 , 收藏 。创作不易,大家的支持就是我坚持下去的动力!
