序言
java中比较爽的就是 具有自由回收垃圾的功能,这让你在编写代码更加容易。但是这不能成为你不注意内存管理的理由。上例子
public class Stack {
private Object[] elements;
private int size = 0;
private static final int DEFAULT_SIZE = 16;
public void push(Object obj) {
ensureCapacity();
elements[size++] = obj;
}
public Object pop(){
if(size==0)
throw new EmptyStackException();
return elements[--size];
}
private void ensureCapacity() {
if (elements.length == size) {
elements = Arrays.copyOf(elements, size + (size >> 1));
}
}
}
程序中隐藏着一个问题,那就是内存泄漏就是在这一块
public Object pop(){
if(size==0)
throw new EmptyStackException();
return elements[--size];
}
每次取完后 elements的元素后并没有把没有用的对象给清除掉。当次类使用频繁的时候,会造成许许多多的对象被排除在垃圾回收机制之外,从而对性能造成比较大的影响。
其实可以进行一个简单的修复,就可以解决这个问题
public Object pop(){
if(size==0)
throw new EmptyStackException();
Object result= elements[--size];
elements[size]=null;
return result;
}
清空对象引用应该是一种例外,而不是一种规范。
一般来说只要是类自己管理内存,就应该去思索会不会导致内存泄漏的问题。
上一篇:第6条 避免创建不必要的对象
下一篇:第8条 避免使用终结方法清除方法