如果有遗漏,评论区告诉我进行补充
面试官: 说说堆和栈的区别?
我回答:
在 Java 高级面试中,关于堆和栈的区别是一个常见的问题。堆和栈是 JVM(Java虚拟机)内存模型中的两个重要部分,它们在程序执行过程中扮演着不同的角色。下面是对堆和栈的详细解释:
堆(Heap)
-
定义:
-
作用:
- 存储对象实例和数组。
- 动态分配内存,即在运行时根据需要分配内存。
-
生命周期:
- 对象在堆中创建,当对象不再被引用时,垃圾回收器会回收这些对象占用的内存。
-
内存管理:
-
示例:
java">String str = new String("Hello");
栈(Stack)
-
定义:
-
作用:
- 存储方法的局部变量(基本数据类型和对象引用)。
- 存储方法调用的上下文信息,如方法参数、返回值等。
-
生命周期:
-
内存管理:
-
示例:
java">public void exampleMethod() {int a = 10; // a 存储在栈中String str = "Hello"; // str 引用存储在栈中,"Hello" 对象存储在堆中 }
主要区别
-
内存分配:
-
存储内容:
-
内存管理:
-
线程共享:
-
内存大小:
-
访问速度:
示例代码
java">public class MemoryExample {public static void main(String[] args) {int a = 10; // a 存储在栈中String str = new String("Hello"); // str 引用存储在栈中,"Hello" 对象存储在堆中exampleMethod();}public static void exampleMethod() {int b = 20; // b 存储在栈中String str2 = "World"; // str2 引用存储在栈中,"World" 对象存储在堆中}
}