Java的内存管理其实就是对象的分配和释放问题。我们需要通过关键字new为每个对象申请内存空间 (基本类型除外),所有的对象都在堆 (Heap)中分配空间。另外,对象的释放是由GC决定和执行的。在Java中,内存的分配是由程序完成的,而内存的释放是有GC完成的,而释放对象的根本原则就是该对象不再被引用。
内存泄漏:虽然,程序中对象是无用的,即程序以后不会再使用这些对象,但此对象存在通路可以与其它相连;
内存泄漏不是很好描述,举个例子更容易理解:
Vector v=new Vector(10);
for (int i=1;i<100; i++)
{
Object obj=new Object();
v.add(obj);
obj=null;
}
我们循环申请Object对象,并将所申请的对象放入一个Vector中,如果我们仅仅释放引用本身,那么Vector 仍然引用该对象,所以这个对象对GC来说是不可回收的。
因此,如果对象加入到Vector后,还必须从Vector中删除,最简单的方法就是将 Vector对象设置为null。
|