提高java程序性能之垃圾收集
Java使用垃圾收集或者说回收不再使用的内存的技术而不需要你明确的管理储存。垃圾收集是自动的,但是在有些情况下可以有办法辅助这个过程。想像一下你在管理一个对象引用的堆栈:
public class Stack {
private static final int MAXLEN = 10;
private Object stk[] = new Object[MAXLEN];
private int stkp = -1;
public void push(Object p) {stk[++stkp] = p;}
public Object pop() {return stk[stkp--];}
}
现在考虑堆栈中有两个元素,而且你从中取出一个,在这个时候,堆栈中的 stk[0] 将保存一个有效的元素,而 stk[1] 保存的是刚刚取出的元素。也就是stk[1] 是一个对象的引用,它可能是任何对象的引用,包括可能是一个大的包含上千个字节的数据结构的引用。在这个情况下,这个结构不能被垃圾收集掉,即使它可能永远都不再被使用。
为了纠正这个问题,可以像下面那样重写pop方法:
public Object pop()
{
Object p = stk[stkp];
stk[stkp--] = null;
return p;
}
你没有使该对象自身无效,而仅仅是对它的一个引用不再有效。堆栈对象自身可能还有很长的生存期,而像那样重写pop方法可以帮助确保垃圾收集及时的完成。