Java程序在运行时都会开辟内存空间,而栈和堆就是JVM虚拟机在运行时开辟的内存空间。
栈:
函数中定义的基本数据类型与局部变量都是在栈内存中被分配,而用完之后这些变量将会在栈内存中被释放,局部变量存在于方法中,一旦方法被执行,局部变量也将会被执行,而方法执行完后,这个变量将会在栈内存中被释放掉。
堆:
实体对象(被new出来的)在堆内存中被分配,而这些实体封装的数据属性如果在用完后被释放实体对象也不会被释放,但是Java中垃圾回收机制,在对象不被使用后,会被自动当成垃圾不定时的回收。
示例:
int[] a = new int[2];
这里首先在栈中给a变量分配地址,在堆中给数组分配2个大小的内存空间,并给数组中的每个默认值一个地址(默认为0),这个也就是两个0,之后栈中的a会根据这个地址被赋值,当用完后,a变量会被释放掉,而new对象在堆中存在。



