Java 性能优化(防止内存泄漏)

    垃圾回收器是根据对象被引用数来决定是否回收的,也就是说没一个对象在内存中都会有一个计数器,保存该对象当前被引用的次数,如果被引用的次数为0 的时候,垃圾回收器就会选择一个适当的实际将该对象所占的内存空间回收,并将该对象释放,问题就出在这个计数器上,如果该计数器不为0,也就是说对象仍然会被一次或者多次引用,而我们并没有意识到这一点,那么这个引用计数器就永远不会是0了,就会造成这个对象永远不会被释放,从而造成内存泄漏的情况,例子:

    public class stack{

       private Person [] persons;

       private int currentIndex ;

       public Person pop(){

           if(currentIndex == 0)

                 new ThrowException ();

            currentIndex -- ;

            return persons[currentIndex];

       }

    }

    当pop方法直接从persons数组中取出某个位置的Person对象并返回后,person数组中的相应Person对象没有被释放,而且在同样的位置在雅茹新的Person对象的时候,原来的对象就再也没有被释放的机会了,这样Person对象的引用次数至少为1,而且永远为1(Stack 对象被释放) ,为了避免这样的情况的发生,不要直接返回persons数组的Person对象,而要先将Person对象取出,再将persons数组中的相应位置设为null (引用指针减一)

public Person pop(){

 if(currentIndex == 0)

throw new Exception;

Person  person = persons[currenIndex];

//引用计数减一

persons[currenIndex] == null

return person;

}

 

 

 

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值