Java 调整JFrame的大小会增加大量内存

Java 调整JFrame的大小会增加大量内存,java,swing,memory,jframe,Java,Swing,Memory,Jframe,我正在创建一个简单的JFrame窗口,并检查windows任务管理器的内存使用情况。当我尝试使用鼠标指针(而不是最大值按钮)调整JFrame的大小时,它会在51000K到400000K之间添加大量内存,而且不会下降,但当我使用最大值按钮时,它甚至不会添加内存 是什么原因导致它增加了大量内存,却永远不会下降 Image bg = new ImageIcon(getClass().getResource("circle.png")).getImage(); JFrame jf = new J

我正在创建一个简单的JFrame窗口,并检查windows任务管理器的内存使用情况。当我尝试使用鼠标指针(而不是最大值按钮)调整JFrame的大小时,它会在51000K到400000K之间添加大量内存,而且不会下降,但当我使用最大值按钮时,它甚至不会添加内存

是什么原因导致它增加了大量内存,却永远不会下降

Image bg = new ImageIcon(getClass().getResource("circle.png")).getImage();
    JFrame jf = new JFrame("MySqlConnections");
    jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    jf.setSize(400,400);
    jf.setIconImage(bg);
    new ConnectMysql(jf);
    jf.setLocationRelativeTo(null);
    jf.setPreferredSize(new Dimension(xFrame, yFrame)); 
    jf.setMinimumSize(jf.getPreferredSize());
    jf.setVisible(true);


public static void main(String[] args) {
    new MainFrame();
     /* Total number of processors or cores available to the JVM */
    System.out.println("Available processors (cores): " + 
        Runtime.getRuntime().availableProcessors());

    /* Total amount of free memory available to the JVM */
    System.out.println("Free memory (bytes): " + 
        Runtime.getRuntime().freeMemory());

    /* This will return Long.MAX_VALUE if there is no preset limit */
    long maxMemory = Runtime.getRuntime().maxMemory();
    /* Maximum amount of memory the JVM will attempt to use */
    System.out.println("Maximum memory (bytes): " + 
        (maxMemory == Long.MAX_VALUE ? "no limit" : maxMemory));

    /* Total memory currently in use by the JVM */
    System.out.println("Total memory (bytes): " + 
        Runtime.getRuntime().totalMemory());

    /* Get a list of all filesystem roots on this system */
    File[] roots = File.listRoots();

    /* For each filesystem root, print some info */
    for (File root : roots) {
      System.out.println("File system root: " + root.getAbsolutePath());
      System.out.println("Total space (bytes): " + root.getTotalSpace());
      System.out.println("Free space (bytes): " + root.getFreeSpace());
      System.out.println("Usable space (bytes): " + root.getUsableSpace());
    }

}

它可能会增加内存,因为您正在逐步调整大小,它需要重新绘制完整的帧一次又一次。为什么它不会下降,因为它依赖于垃圾收集器,只要有空间释放一些内存,垃圾收集器就不会立即运行。

这与调整帧大小时的操作有很大关系。你能提供示例代码来演示这个问题吗…为了更快地获得更好的帮助,请发布一篇文章;当然