Java JFrame对象准备进行垃圾收集的条件
从中,我了解到,即使程序员没有对对象的剩余引用(变得不可访问),它也可能没有准备好进行垃圾收集。一个无法访问但正在运行的Java JFrame对象准备进行垃圾收集的条件,java,swing,garbage-collection,jframe,Java,Swing,Garbage Collection,Jframe,从中,我了解到,即使程序员没有对对象的剩余引用(变得不可访问),它也可能没有准备好进行垃圾收集。一个无法访问但正在运行的线程尚未加入就是这样一个例子。我的问题是:还没有关闭的不可访问的JFrame(因此,仍然有一个工作且可见的GUI界面)是否准备好进行垃圾收集?如果答案是肯定的,这种行为会干扰或强制关闭GUI界面吗?例如,以下代码片段摘自《Java:A初学者指南》一书: 请注意,当SwingDemo构造函数返回时,无法再访问创建的JFrame对象 您的一个假设是错误的:JFrame是可访问的,一
线程
尚未加入就是这样一个例子。我的问题是:还没有关闭的不可访问的JFrame
(因此,仍然有一个工作且可见的GUI界面)是否准备好进行垃圾收集?如果答案是肯定的,这种行为会干扰或强制关闭GUI界面吗?例如,以下代码片段摘自《Java:A初学者指南》一书:
请注意,当
SwingDemo
构造函数返回时,无法再访问创建的JFrame
对象 您的一个假设是错误的:JFrame是可访问的,一种方式是通过。此方法上的JVM:
返回此应用程序创建的所有窗口的数组,包括有主窗口和无主窗口。如果从小程序调用,则数组仅包括该小程序可访问的窗口
除了没有人对它有强烈的引用之外,它的所有内部组件,调用
dispose
或将defaultCloseOperation
设置为dispose\u ON\u EXIT
,这将释放它的本机资源,这可能不会造成伤害。请参阅和。“我的问题是:是否有一个无法访问的JFrame尚未关闭(因此,仍然有一个工作且可见的GUI界面)准备进行垃圾收集?”-否。Swing工具包将保留它自己对框架的引用,直到它被关闭或处理更多。@SotiriosDelimanolis因此,答案在于JFrame
的构造函数。
class SwingDemo {
SwingDemo() {
JFrame jfrm = new JFrame("A Simple Swing Application");
jfrm.setSize(275, 100);
jfrm.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
JLabel jlab = new JLabel(" Swing defines the modern Java GUI.");
jfrm.add(jlab);
jfrm.setVisible(true);
}
...
}