java重新分配对象引用变量是否会杀死旧对象?
如果我有一个类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);
}
}
# 1 楼答案
您需要小心使用扩展窗口的Swing组件,如JFrame和JDialog,因为它们具有不会被垃圾收集的对等组件。要正确gc窗口,请使用窗口。处置()
但除此之外,一旦堆上的对象无法从任何活动线程访问,该对象就有资格进行垃圾收集
# 2 楼答案
对。您正在将“旧”CatFrame替换为“新”CatFrame,从而允许垃圾收集器收集“旧”CatFrame,因为您的程序不再以任何方式访问它(如果这是唯一的引用)
编辑:
不过,JFrames和其他类似的对象有点棘手。参见ControlAltDel的回答