这两天在折腾处理服务器大访问量的处理,其中可能会涉及到堆和栈结构,这里稍稍做下记录。
Java 把内存划分成两种:一种是栈内存,另一种是堆内存。
当在一段代码块定义一个变量时,Java就在栈中为这个变量分配内存空间,当超过变量的作用域后,Java会自动释放掉为该变量所分配的内存空间,该内存空间可以立即被另作他用。
堆内存用来存放由new创建的对象和数组。
在堆中分配的内存,由Java虚拟机的自动垃圾回收器来管理。
在堆中产生了一个数组或对象后,还可以在栈中定义一个特殊的变量,让栈中这个变量的取值等于数组或对象在堆内存中的首地址,栈中的这个变量就成了数组或对象的引用变量。
引用变量就相当于是为数组或对象起的一个名称,以后就可以在程序中使用栈中的引用变量来访问堆中的数组或对象。
简而言之,也就是说,栈中存放地址,堆中存放对象。
对于栈和堆,我个人的理解是:栈中存放的地址指向堆中存放的对象(这或许可以理解成JAVA的指针?)。
占用空间而言的话,必须是栈中存放的空间比较小。