Java中堆与栈

Posted by 小白 on June 30, 2017

Java把内存分为两种:堆内存和栈内存。

函数中定义的一些基本类型变量和对象的引用变量一般都会在栈内存中分配,当超过变量的作用域后,Java会自动释放掉为该内存分配的内存空间,之后该内存又可以立刻被用在别的地方;

当new语句创建一个新的对象或数组时,则用堆内存来存放。在堆中产生了一个数组或者对象之后,还可以在栈中定义一个特殊的变量,让栈中的这个变量的取值等于数组或对象在堆内存中的首地址,栈中的这个变量就成了数组或对象的引用变量,以后就可以在程序中使用栈中的引用变量来访问堆中的数组或者对象。</br> 引用变量在超过它的作用域之后就会被释放,然而数组和对象占用堆内存,即使运行到新建对象的代码块之外,也不会被释放。仅当没有引用变量指向它的时候,才变为垃圾,然后在不确定的时间被GC。