【发布时间】:2015-11-05 20:42:35
【问题描述】:
从this thread,我了解到,即使程序员没有对对象的剩余引用(变得无法访问),它也可能还没有准备好进行垃圾回收。一个无法访问但正在运行但尚未加入的Thread 就是这样一个例子。我的问题是:一个无法访问的JFrame 是否还没有关闭(因此,仍然有一个工作和可见的 GUI 界面)准备好进行垃圾收集?如果答案是肯定的,这种行为是否会破坏或强制关闭 GUI 界面?例如,以下代码 sn-p 摘自Java: A Beginner's Guide一书:
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);
}
...
}
请注意,当SwingDemo 构造函数返回时,创建的JFrame 对象不再可访问。
【问题讨论】:
-
除了没有人强烈引用它的所有内部组件外,调用
dispose或将defaultCloseOperation设置为DISPOSE_ON_EXIT这将释放它的本机资源可能不会受到伤害。 -
“我的问题是:一个无法访问的 JFrame 是否还没有关闭(因此,仍然有一个工作和可见的 GUI 界面)准备好进行垃圾收集?” -不会。Swing 工具包将保持它自己对框架的引用,直到它被关闭或释放
-
更多here.
-
@SotiriosDelimanolis 所以,答案在于
JFrame的构造函数。
标签: java swing garbage-collection jframe