java为什么这些JFrame没有被垃圾收集?
是什么触发了JFrames和其他Swing组件的垃圾收集?在下面的代码中,在第二次Thread.sleep()
期间分析堆会发现JFrame实例没有被垃圾收集(我特别使用VisualVM)。即使在VisualVM中手动运行垃圾收集,该实例仍然存在。Swing线程是否以某种方式引用了这些?有趣的是,如果第一个Thread.sleep(2000)
被删除,那么JFrame将被收集
import javax.swing.JFrame;
public class TestDemo {
public static void makeFrame() {
JFrame frame = new JFrame();
frame.setSize(500, 500);
frame.setVisible(true);
try {
Thread.sleep(2000);
} catch (InterruptedException e) {
e.printStackTrace();
}
frame.dispose();
frame = null;
}
public static void main(String[] args) {
makeFrame();
System.gc();
try {
Thread.sleep(1000000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
你知道为什么会这样吗
共 (0) 个答案