Java 把内存划分成两种:一种是栈内存,另一种是堆内存。
- 栈式存储:
- 在函数中定义的一些基本类型的变量和对象的引用变量都是在函数的栈内存中分配,当超过变量的作用域后,Java 会自动释放掉为该变量分配的内存空间,该内存空间可以立即被另作它用。
- 优点:存取速度比堆要快,仅次于寄存器,栈数据可以共享。
- 缺点:存在栈中的数据大小与生存期必须是确定的,缺乏灵活性。栈中主要存放一些基本类型的变量(,int, short, long, byte, float, double, boolean, char)和对象句柄。
- 堆式存储:
- 堆内存用来存放由 new 创建的对象和数组,在堆中分配的内存,由 Java 虚拟机的自动垃圾回收器来管理。
- 优点:堆是由垃圾回收来负责的,堆的优势是可以动态地分配内存大小,生存期也不必事先告诉编译器,因为它是在运行时动态分配内存的,Java的垃圾收集器会自动收走这些不再使用的数据。
- 缺点是:由于要在运行时动态分配内存,存取速度较慢。
java中所有对象都在堆内存中,基本数据存储在栈内存中;
举例:
int [] array = new int[5];
这段代码创建了一个长度为5的整型数组,这个数组的引用名为:array它作为数组的对象存储在堆内存中,而实际数组数据存储在栈内存中