一、消除过期的对象的引用的好处
好处1、防止内存泄漏,导致磁盘交换,甚至会导致程序失败
好处2、如果错误地解除引用,程序就会立即抛出NULL指针异常,而不是错误的运行下去。尽快地检测出程序中的错误总是有益的
import java.util.Arrays;
import java.util.EmptyStackException;
/**
* 消除过期的对象的引用
*/
public class Stack {
private Object[] elements;
private int size = 0;
private static final int DEFAULT_INITIAL_CAPACITY = 16;
public Stack(){
elements = new Object[DEFAULT_INITIAL_CAPACITY];
}
public void push (Object e){
ensureCapacity();
elements[size++] = e;
}
//内存泄漏,导致磁盘交换,甚至会导致程序失败
// public Object pop(){
// if (size == 0)
// throw new EmptyStackException();
// return elements [--size];
// }
//修复方法,一旦对象引用过期,只需要清空这些引用
public Object pop(){
if (size == 0)
throw new EmptyStackException();
Object result = elements[--size];
elements[size] = null;//清空过期对象引用
return result;
}
private void ensureCapacity(){
if ( elements.length == size){
elements = Arrays.copyOf(elements,2 * size +1);
}
}
}
网友评论