内存模型题:Java 中的栈(Stack)和堆(Heap)的区别

问题:请说明 Java 内存中栈(Stack)和堆(Heap)的存储内容、特点及区别,举例说明哪些数据会存到栈,哪些存到堆。

栈(Stack)

  • 存储内容:局部变量(方法内定义的变量)、方法调用的栈帧(包含参数、返回值、执行状态);
  • 特点:线程私有、大小固定、存取速度快、遵循 “先进后出” 原则,由 JVM 自动分配和释放;
  • 示例:int a = 10; 中 a 是局部变量,存于栈;方法调用 test() 时,会创建栈帧入栈,方法执行完栈帧出栈。

堆(Heap)

  • 存储内容:所有对象(包括实例变量)、数组、常量池(JDK 1.7 后移到堆);
  • 特点:线程共享、大小动态、存取速度慢,由 GC(垃圾回收器)回收未被引用的对象;
  • 示例:new Person("张三"); 创建的 Person 对象存于堆,栈中仅保存该对象的引用地址。
  • 核心区别:栈是 “临时存储”,堆是 “持久存储”;栈私有、堆共享;栈自动回收、堆手动(GC)回收。
    image
posted @ 2026-03-04 14:36  白鹿为溪  阅读(31)  评论(0)    收藏  举报