栈与堆
栈(Stack):
- 栈内存主要用于存储方法调用和局部变量等数据。
- 在栈上存储引用类型数据时,实际存储的是对象在堆内存中的引用地址(指针),而不是对象本身的数据。
- 栈上的引用变量大小固定,与引用所指对象的大小无关。
- 栈内存的分配和释放是自动的,方法调用时会创建栈帧来存储方法的参数、局部变量和返回地址,方法返回时栈帧会被弹出。
堆(Heap):
- 堆内存用于存储动态分配的引用类型对象数据。
- 对象的实际数据存储在堆内存中,而栈上存储的是引用地址。
- 堆内存的分配和释放需要程序员自行管理,通过
new
关键字来创建对象,垃圾收集器会自动回收不再使用的对象。 - 多个引用变量可以指向堆内存中的同一个对象,实现对象的共享。