如果我有一个类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);
}
}
答案 0 :(得分:8)
你需要注意扩展Window的Swing组件,比如JFrame和JDialog,因为它们具有不会被垃圾收集的对等组件。要正确gc窗口,请使用Window.dispose();
但是,否则,一旦从任何活动线程无法访问堆上的对象,该对象就有资格进行垃圾回收
答案 1 :(得分:1)
是。你正在取代旧的" CatFrame与" new"一,因此允许" old" CatFrame由垃圾收集器收集,因为程序不再以任何方式访问它(如果这是唯一的引用)。
编辑:
JFrames和其他类似的对象虽然有点棘手。请参阅ControlAltDel的答案。