面试题答案
一键面试栈内存和堆内存主要区别
- 管理方式:
- 栈内存:由编译器自动管理,生命周期与函数调用相关,函数结束时,栈上变量自动释放。
- 堆内存:由程序员手动管理(Java 中通过垃圾回收机制自动回收),对象的创建和销毁由程序控制,对象不再被引用时,垃圾回收器会在合适时机回收。
- 内存分配:
- 栈内存:分配效率高,是连续的内存空间,按照后进先出(LIFO)的原则进行数据存储和访问。
- 堆内存:分配效率相对较低,内存空间不连续,通过内存分配算法来分配内存块。
- 内存大小:
- 栈内存:每个线程的栈大小有限,一般较小,通常为几 MB。
- 堆内存:可使用的内存大小相对较大,取决于系统可用内存。
存储数据类型及举例
- 栈内存存储数据类型:
- 基本数据类型:如
byte
、short
、int
、long
、float
、double
、char
、boolean
。例如:
- 基本数据类型:如
int num = 10;
这里的 num
变量存储在栈内存中,值为 10。
- 对象引用:当创建一个对象时,对象的引用存储在栈内存中。例如:
String str = "Hello";
这里的 str
是 String
对象的引用,存储在栈内存中,而实际的字符串对象存储在堆内存中。
2. 堆内存存储数据类型:
- 对象实例:所有通过 new
关键字创建的对象都存储在堆内存中。例如:
Dog dog = new Dog();
这里通过 new
创建的 Dog
对象实例存储在堆内存中,dog
引用指向堆内存中的该对象。
- 数组:数组也是对象,所以数组对象存储在堆内存中。例如:
int[] arr = new int[5];
arr
是数组的引用在栈内存,实际的数组对象在堆内存。