Java的一个重要优点就是通过垃圾收集器(Garbage Collection,GC)自动管理内存的回收,程序员不需要通过调用函数来释放内存。因此,很多程序员认为Java不存在内存泄漏问题,或者认为即使有内存泄漏也不是程序的责任,而是GC或JVM的问题。其实,这种想法是不正确的。
java的内存泄漏其实称为无意识的对象保存更为合适
例如弹栈操作:
public Object pop(){
if(0 == size)
throw new EmptyStackException();
return elements[--size];
}
弹栈时:
被return的是elements[size-1],也就是栈顶元素,此后size指针--,
虽然栈顶元素被弹出,但是它并没有被GC回收,因为它还保存着对对象的引用,
正确的做法应该是:
public Object pop(){
if(0 == size)
throw new EmptyStackException();
Object result = elements[--size];
elements[size] = null;
return result;
}
PS:
个人感觉,数组存储的是对象的引用
java内存泄露
原文:http://www.cnblogs.com/lnas01/p/5115538.html