栈上分配 VS 堆分配 核心区别 一、基础定义堆分配默认常规创建对象方式new对象实例存堆引用存在虚拟机栈。栈上分配JVM 逃逸分析优化未逃逸对象直接分配在虚拟机栈不在堆创建。二、核心对比表格对比项堆分配栈上分配内存位置JVM 堆内存线程私有虚拟机栈所属线程线程共享线程私有回收方式依靠 GC 垃圾回收方法执行完自动出栈销毁无 GC分配速度慢极快内存大小空间大空间小容量有限触发条件默认 new 对象就是堆分配开启逃逸分析 对象不逃逸线程安全多线程可共享对象仅当前方法使用无共享内存溢出风险易 OOM几乎不会是否产生 GC大量产生 GC零 GC三、使用场景堆分配对象要返回出去赋值给成员变量、静态变量多线程共享对象全局长期存活对象栈上分配对象只在当前方法内使用方法内临时对象用完即弃循环内大量创建局部临时对象优化最强四、生命周期区别堆分配对象创建后直到没有引用指向才会被 GC 回收存活时间不可控栈上分配方法结束立刻销毁生命周期和方法一致五、性能差距堆分配创建对象→分配堆内存→GC 扫描回收开销大栈上分配栈内存直接开辟方法结束自动释放性能提升明显搭配标量替换连对象都不创建直接拆成基本变量性能拉满六、面试极简背诵堆分配在共享堆内存靠 GC 回收栈分配在线程栈方法结束自动释放。堆分配通用栈分配依赖逃逸分析 对象不逃逸。栈上分配无 GC 开销适合局部临时对象需要对外暴露对象只能堆分配。七、一句话总结临时自用走栈上对外暴露放堆里。