首页 > 编程语言 > 详细

[Effective Java 读书笔记] 第二章 创建和销毁对象 第六-?条

时间:2015-08-26 01:22:50      阅读:263      评论:0      收藏:0      [点我收藏+]

第六条 消除过期引用

  JAVA中依然会有 memory leak的,比如一个栈先增长再收缩,那么从栈中弹出的对象是不会被当做垃圾回收的,即时使用栈的程序不再引用这些对象。这是因为栈的内部维护着对这些对象的过期引用(永远也不会被解除的引用),需要显示的将这些对象清空(置为null),告诉垃圾回收器回收这些对象。

    比如Stack类的实现里,pop()函数最后会有对element置null的操作:

    public synchronized E pop() {
        E       obj;
        int     len = size();

        obj = peek();
        removeElementAt(len - 1);

        return obj;
    }    
public synchronized void removeElementAt(int index) {
        ...........
        ...........
        elementData[elementCount] = null; /* to let gc do its work */
    }

 

    除了栈上的内存泄露以外,还有缓存上的内存泄露,即把对象放缓存然后忘记;还有监听器和其他回调时,这个貌似不太严重。。。。

   

 

[Effective Java 读书笔记] 第二章 创建和销毁对象 第六-?条

原文:http://www.cnblogs.com/jiangz222/p/4758959.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!