Я делаю приложение и отслеживаю его использование памяти. Объем памяти приложения составляет около 58 676 КБ, как показано ниже. введите описание изображения здесь

Это мой графический интерфейс.

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);
    }

};

Панель была инициализирована еще до того, как приложение начало показывать.

Моя проблема в том, что, просто заставляя графический интерфейс появляться и закрывая его снова и снова, приложение увеличивает использование памяти.

Разве это не утечка памяти какая-то? Независимо от ответа, как мне предотвратить это?

enter image description here

0
xchan 6 Май 2014 в 05:02

2 ответа

Лучший ответ

Вы должны использовать профилировщик, чтобы найти утечку памяти.

В NetBeans вверху рядом с кнопками «Выполнить проект» и «Отладка проекта» находится кнопка «Профиль проекта» (Alt-F2).

При первом запуске он может попросить вас откалибровать или что-то в этом роде.

Afterwars, вы можете выбрать анализ ЦП или памяти. Если вы нажмете «Память», отметите «Простой» и нажмите «Выполнить», вы сможете запустить свой проект и посмотреть, что использует память.

1
Anubian Noob 6 Май 2014 в 01:14

Нет, это не может быть признаком утечки памяти. Потому что, когда вы закрываете и открываете графический интерфейс несколько раз, ваше приложение может создавать и отбрасывать некоторые объекты. Но JVM может еще не собрать их мусор. Если вы хотите получить реальное изображение, используйте инструмент профилирования. Делайте дамп кучи с течением времени после запуска сборщика мусора. Это скажет вам, что еще осталось в памяти.

Это может помочь вам сузить поиск возможных утечек памяти.

Простейшие инструменты для профилирования.

  1. Netbeans поставляется со встроенным профилировщиком.
  2. Jconsole также может немного помочь
  3. VisualVm также может немного помочь.

Также посмотрите эту ссылку, как анализировать heapdumps

1
Community 23 Май 2017 в 11:50