标签:ack elements exce 将不 null 解决 vat tac 过期
先要明白一个概念是在你使用完某个对象之后,对象处于未被引用的状态,此时就会被回收。public class Stack{
private Object[] elements;
private int size=0;
private static final int DEFALUT_INITIAL_CAPACITY=16;
public Stack(){
elements=new Object[DEFALUT_INITIAL_CAPACITY];
}
public void push(Object o){
ensureCapacity();//检查容量
elements[size++]=e;
}
public Object pop(){
if(size==0){
throw new EmptyStackException();
return elements[size--];
}
}
private void ensureCapacity(){
if(elements.length==size){
elements=Arrays.copyOf(elements,2*size+1);
}
}
}
在上述代码中如果栈如果是先扩大,然后再缩小的情况下,会造成从栈中弹出的对象将不会被垃圾回收,即使你不在引用这些对象。它们不会被回收的 原因是因为栈内部维护着对这些对象的过期引用。此时的对象永远不会被接触引用,如果有大量的过期引用对象,将会对系统造成过大的不必要的负担。
解决的办法如下:在pop方法中
Object result=elements[--size];
elements[size]=null;//消除引用,结束变量的生命周期
标签:ack elements exce 将不 null 解决 vat tac 过期
原文地址:http://blog.51cto.com/13919712/2284388