简单的Java程序越来越消耗内存

时间:2012-10-03 14:52:50

标签: java swing memory-efficient memory-consumption

我有这个简单的Java代码,它创建一个JFrame实例并显示它。此链接包含jconsole

采用的内存消耗图表的屏幕截图

enter image description here

令我担心的是,任务管理器中的java.exe显示内存使用率以每8-9秒4-5 kbs的速率不断增加。需要帮助

import javax.swing.*;

class MyGUI extends JFrame
{
    public void makeGUI()
    {
        setLayout(null);
        setSize(500, 200);
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setVisible(true);
    }
}

public class Launcher
{
    public static void main(String []args)
    {
        SwingUtilities.invokeLater(new Runnable()
                    {
                       public void run()
                       {
                        new MyGUI().makeGUI();
                       }
                    });
    }
}

3 个答案:

答案 0 :(得分:7)

配置文件看起来很正常 - 程序创建对象,垃圾收集器不时通过删除不再可访问的对象来释放内存。

重要的观察结果是,低谷点或多或少都处于同一水平,所以看起来你的代码没有内存管理问题。

您可以通过将最大堆空间量设置为较低级别来降低峰值的高度,但无论如何5 MB都不会...

答案 1 :(得分:4)

我认为这个记忆是由于swing所使用的对象的产生,比如各种UI事件(鼠标移动等等)。 Swing倾向于为每个事件生成对象,并调用处理这些事件的侦听器。之后,这些与事件相关的对象不再使用(除非您继续引用它们)。

这不是内存泄漏,这是正常行为。实际上,在你的内存消耗截图中,当垃圾收集器释放这些对象时,内存会急剧下降。

答案 2 :(得分:0)

Java倾向于根据需要使用内存。它不会经常进行垃圾收集,因此即使在运行时使用简单的程序,它也会自然增加。因为它必须为你甚至不会看到的小事件制作课程。

如果你想强制java进行垃圾收集并手动减少内存使用量,你总是可以调用System.gc(),但你应该只使用非常谨慎

相关问题