2014-05-06 3 views
0

Я делаю приложение, и я отслеживаю его использование памяти. Память приложения составляет около 58,676 K, как показано ниже. enter image description hereЗнаки утечки памяти Java

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

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 в верхней части рядом с кнопками «Запустить проект» и «Отладка проекта» кнопка «Профиль проекта» (Alt-F2).

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

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

+1

Я смог уменьшить до 5 миллионов байт Int [], отслеживая его с помощью профилировщика. Для тех, у кого такая же проблема, масштабирование изображения с помощью getScaledInstance занимает много памяти, istead рисует изображение, используя bufferedImage и Graphics2D :) спасибо! – xchan

+0

Удивительный, рад, что я мог бы помочь :). Профилирование/отладка - хороший навык. –

1

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

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

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

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

Also see this link how to analyze heapdumps

Смежные вопросы