重新分配对象引用变量是否会杀死旧对象?

时间:2016-06-28 18:11:47

标签: java swing garbage-collection

如果我有一个类CatFrame,它扩展了JFrame,那么我设置myCat = new CatFrame();,然后我会myCat = new CatFrame(false);。旧的CatFrame是否有资格进行垃圾回收?

public class CatFrame extends JFrame{
    public CatFrame(){
         this.setVisible(false);
    }

public CatFrame(boolean b){
         this.setVisible(false);
    }
}

2 个答案:

答案 0 :(得分:8)

你需要注意扩展Window的Swing组件,比如JFrame和JDialog,因为它们具有不会被垃圾收集的对等组件。要正确gc窗口,请使用Window.dispose();

但是,否则,一旦从任何活动线程无法访问堆上的对象,该对象就有资格进行垃圾回收

答案 1 :(得分:1)

是。你正在取代旧的" CatFrame与" new"一,因此允许" old" CatFrame由垃圾收集器收集,因为程序不再以任何方式访问它(如果这是唯一的引用)。

编辑:

JFrames和其他类似的对象虽然有点棘手。请参阅ControlAltDel的答案。