[Java] 堆和栈的区别
Java中的内存分为两种,堆内存和栈内存
一、栈内存
在函数当中定义的基本类型变量和对象引用变量,java都会给它分配栈内存。一旦离开作用域,这些内存都会被释放掉。
在函数当中的代码块当中定义的变量,java也会给它分配栈空间。
二、堆内存
在java当中使用new关键字创建的内存是在堆上分配的,这些内存是由java虚拟机的垃圾回收器来自动管理的。在栈中可以定义特殊的引用变量指向在堆内存中分配的对象或者数组的首地址,通过这些引用变量来操作堆内存。当没有引用指向这些堆中的内存的时候,这些内存就变为了不可访问的内存,也就是变为了垃圾,但是此时并不会被回收。GC垃圾回收器,会在一个不确定的时间将这些垃圾进行回收。
[1] http://blog.csdn.net/huozhicheng/article/details/6575960