java内存泄露

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:
个人感觉,数组存储的是对象的引用
原文地址:https://www.cnblogs.com/lnas01/p/5115538.html