有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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) 个答案