系统相关
首页 > 系统相关> > Java-JFrame内存泄漏

Java-JFrame内存泄漏

作者:互联网

我使用以下简单代码在Java中创建了一个新项目:

    public static void main(String[] args)
{
    JFrame frame;
    frame = new JFrame("Empty");
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    frame.pack();
    frame.setResizable(false);
    frame.setLocationRelativeTo(null);
    frame.setVisible(true);
}

我注意到移动JFrame会导致该进程使用的内存增加.

>为什么呢?
>是否可以使用上面相同的代码来避免这种情况,但还要增加一些内容?
>有没有更好的方法来简单地显示JFrame?

解决方法:

看到内存使用量增加并不意味着内存泄漏.该程序可能会使用更多的内存,因为它必须创建临时对象以进行事件分派或重新绘制.这些临时对象是短暂的,并在很短的时间内被垃圾收集器删除;因此他们使用的内存将再次可供程序使用.

尽管由于内存没有返回给OS,但您不会在过程监视工具中看到此信息. JVM将其保留以备将来使用.您可以使用VisualVM之类的工具来监视程序的实际内存使用情况.

Are there any better ways to simply display a JFrame?

您发布的代码实际上是不正确的.您不应从程序的主线程创建和操作GUI对象.这是显示JFrame from the Java Tutorial的正确示例:

import javax.swing.*;        

public class HelloWorldSwing {
    /**
     * Create the GUI and show it.  For thread safety,
     * this method should be invoked from the
     * event-dispatching thread.
     */
    private static void createAndShowGUI() {
        //Create and set up the window.
        JFrame frame = new JFrame("HelloWorldSwing");
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        //Add the ubiquitous "Hello World" label.
        JLabel label = new JLabel("Hello World");
        frame.getContentPane().add(label);

        //Display the window.
        frame.pack();
        frame.setVisible(true);
    }

    public static void main(String[] args) {
        javax.swing.SwingUtilities.invokeLater(new Runnable() {
            public void run() {
                createAndShowGUI();
            }
        });
    }
}

标签:swing,memory-leaks,jframe,java
来源: https://codeday.me/bug/20191122/2062053.html