垃圾回收器不会对“过期引用”(永远不会在被解除的引用)的对象进行回收。如:数组中的元素先增加再减少这种情况,下标大于size()的那一部分就是过期引用的对象。
解决方法:
public Object pop(){
if(size == 0){
throw new EmptyStackException();
}
Object result = elements[--size];
//自减后把原来的引用置为null
elements[size] = null;
return result;
}
优点:1、避免内存泄漏而造成的系统崩溃(内存泄漏也常见于缓存,由于缓存没有及时清除无用的条目而出现,可以使用weakHashMap来避免这种情况,参考:利用WeakHashMap避免因缓存条目过期而造成的内存泄漏问题);
2、程序能在第一时间抛出空指针异常;