码迷,mamicode.com
首页 > 其他好文 > 详细

对象的引用过期问题

时间:2018-09-25 01:32:56      阅读:172      评论:0      收藏:0      [点我收藏+]

标签: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

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!