Java 中的堆和栈
Java 把内存划分成两种:一种是栈内存,一种是堆内存。 在Java 中所有对象的存储空间都是在堆中分配的,但是这个对象的引用却是在堆栈中分配 , 也就是说在建立一个对象时从两个地方都分配内存,在堆中分配的内存实际建立这个对象,而在堆栈中分配的内存只是一个指向这个堆对象的指针 ( 引用 ) 而已。 当在一段代码块定义一个变量时, Java 就在栈中为这个变量分配内存空间,当超过变量的作用域后, Java 会自动释放掉为该变量所分配的内存空间,该内存空间可以立即被另作他用。 堆内存用来存放由 new 创建的对象和数组。 在堆中分配的内存,由 Java 虚拟机的自动垃圾回收器来管理。 在堆中产生了一个数组或对象后,还可以在栈中定义一个特殊的变量,让栈中这个变量的取值等于数组或对象在堆内存中的首地址,栈中的这个变量就成了 数组或对象的引用变量 。 引用变量就相当于是为数组或对象起的一个名称,以后就可以在程序中使用栈中的引用变量来访问堆中的数组或对象。 具体的说: 栈与堆都是 Java 用来在 Ram 中存放数据的地方。与 C++ 不同, Java 自动管理栈和堆,程序员不能直接地设置栈或堆。 Java 的堆是一个运行时数据区 , 类的 ( 对象从中分配空间。这些对象通过 new 、 newarray 、 anewarray 和