2014-05-06 246 views
0

我一直在做一个应用程序,我一直在追踪它的内存使用情况。该应用程序的内存大约为58,676 K,如下所示。 enter image description hereJava内存泄漏迹象

这是我的GUI。

enter image description here

即关闭按钮处有一个功能,使该面板不可见。

private final ActionListener closeButtonAL = new ActionListener(){ 

    @Override 
    public void actionPerformed(ActionEvent e) { 
     timeUtilities.getPanel().setVisible(false); 
    } 

}; 

我也有一个按钮,使面板再次可见。

private final ActionListener showPanelAL = new ActionListener(){ 

    @Override 
    public void actionPerformed(ActionEvent e) { 
     timeUtilities.getPanel().setVisible(true); 
    } 

}; 

在应用程序开始显示之前面板已经被初始化。

我的问题是,通过只是使GUI出现并关闭它一次又一次地增加了应用程序的内存使用情况。

这不是某种内存泄漏?无论答案如何,我如何预防此事?

enter image description here

+0

您是否尝试过使用探查器?这很容易告诉你什么是错的。 –

+0

@AnubianNoob我不知道那个分析器的东西,你能简单地解释一下我在哪里以及如何访问它?或者它做了什么? – xchan

+0

你在用什么IDE? –

回答

1

你应该使用一个分析器来定位你的内存泄漏。

在NetBeans中,“Run Project”和“Debug Project”按钮旁边的顶部是一个“Profile Project”按钮(Alt-F2)。

首先运行,它可能会要求你校准或者其他什么。

事件发生后,您可以选择分析CPU或内存。如果您点击内存,选中“简单”,然后点击运行,您可以运行您的项目并查看正在使用的内存。

+1

通过跟踪Profiler,我能够减少多达500万字节的Int []。对于那些有同样问题的人,使用getScaledInstance缩放图像需要大量内存,而不是使用bufferedImage和Graphics2D绘制图像:)谢谢! – xchan

+0

真棒,很高兴我可以帮助:)。分析/调试是一项很好的技能。 –

1

否可能不是内存泄漏的迹象。因为当你多次关闭并打开gui时,你的应用可能正在创建和放弃一些对象。但JVM可能没有垃圾收集它们。如果你想让真实图片使用分析工具。 GC运行后随着时间的推移进行堆转储。这会告诉你什么仍然在内存中。

这可以帮助您缩小寻找可能的内存泄漏。

最简单的工具来配置文件。

  1. Netbeans自带一个内置的分析器。
  2. Jconsole也可以帮助一点
  3. VisualVm也可以帮助一下。

Also see this link how to analyze heapdumps