【问题标题】:Java Memory leakage signsJava 内存泄漏迹象
【发布时间】:2014-06-22 10:57:19
【问题描述】:

我一直在制作一个应用程序,并且一直在跟踪它的内存使用情况。该应用程序的内存约为 58,676 K,如下所示。

这是我的图形用户界面。

那里的关闭按钮具有使该面板不可见的功能。

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 出现并一次又一次地关闭它会增加应用程序的内存使用量。

这不是某种内存泄漏吗?不管答案如何,我该如何防止这件事发生?

【问题讨论】:

  • 您是否尝试过使用分析器进行检查?这很容易告诉你哪里出了问题。
  • @AnubianNoob 我不知道那个分析器的事情,你能简要解释一下我在哪里以及如何访问它吗?或者它有什么作用?
  • 你用的是什么IDE?
  • Netbeans 8.0 Beta 我找到了探查器,百分比最多的是 int[]。这是什么意思?
  • Netbeans 8.0 Beta 我找到了分析器,百分比最多的是 int[],大约有 8,991,824 B Live Bytes 和 608 Live Objects。这是什么意思?

标签: java windows memory desktop


【解决方案1】:

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

在 NetBeans 中,顶部的“运行项目”和“调试项目”按钮旁边是一个“配置文件项目”按钮 (Alt-F2)。

首次运行,它可能会要求您进行校准或其他操作。

战后,您可以选择分析 CPU 或内存。如果你点击 Memory,勾选“Simple”,然后点击 Run,你就可以运行你的项目,看看什么在使用内存。

【讨论】:

  • 通过使用分析器跟踪,我能够减少多达 500 万字节的 Int[]。对于那些有同样问题的人,使用 getScaledInstance 缩放图像会占用大量内存,而是使用 bufferedImage 和 Graphics2D 绘制图像 :) 谢谢!
  • 太棒了,很高兴我能帮上忙 :)。分析/调试是一项很好的技能。
【解决方案2】:

不,这可能不是内存泄漏的迹象。因为当您多次关闭和打开 gui 时,您的应用程序可能会创建和丢弃一些对象。但是 JVM 可能还没有垃圾收集它们。如果您想要真实的图片,请使用分析工具。在 GC 运行后随时间进行堆转储。这会告诉你内存中还剩下什么。

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

最简单的分析工具。

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

Also see this link how to analyze heapdumps

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-09-12
    • 1970-01-01
    • 1970-01-01
    • 2016-09-29
    • 2015-08-14
    • 2012-08-11
    • 2015-12-14
    • 1970-01-01
    相关资源
    最近更新 更多