Утечка памяти в приложениях Eclipse RCP - PullRequest
3 голосов
/ 06 мая 2009

Как можно обнаружить утечку памяти в приложениях Eclipse RCP?

Ответы [ 5 ]

6 голосов
/ 07 мая 2009

Возможно, вы захотите попробовать детектор утечки памяти, который поставляется с JRockit Mission Control вместе с Eclipse MAT . Это мощная комбинация. Оба инструмента бесплатны для разработки.

С помощью JRockit Mission Control вы можете просматривать кучи в режиме онлайн и видеть точное количество объектов определенного типа, которые находятся в режиме реального времени, без необходимости снимать много времени. Вы можете непосредственно увидеть, есть ли у вас объект «Редактор», «Просмотр» или объект прослушивания, оставленный в куче после того, как вы закрыли «Просмотр / Редактор». Обычно это слушатель фреймворка, который поддерживает ваш вид / редактор. Помните, что вы должны зайти в Windows-> Настройки-> Детектор утечки памяти-> Тренд и установить Самое низкое использование кучи, чтобы сообщить равным 0.0, чтобы увидеть все экземпляры объекта.

alt text
(источник: oracle.com )

С помощью MAT вы можете использовать кратчайший путь к корню нити, чтобы найти цепочку, удерживающую протекающий объект. Смотри ниже

альтернативный текст http://dev.eclipse.org/blogs/memoryanalyzer/files/2008/04/path2gc_all.png

Измените свой код и проверьте с помощью детектора утечки памяти, что объект является мусором, когда вы закрываете редактор / представление.

3 голосов
/ 06 мая 2009

Вам нужен какой-то инструмент для профилирования.

На затмении есть проект Memory Analyzer ( wiki , blog ).

Кроме того, похоже, что TPTP также выполняет профилирование.

1 голос
/ 07 мая 2009

Самое простое решение поставляется с Java JDK: Java VisualVM.

Он находится в каталоге bin (jvisualvm.exe под Windows) с момента выпуска JDK 6 7.

Также включает в себя профилировщик памяти, обходчик кучи и Eclipse интеграция .

https://visualvm.dev.java.net/images/getstarted/vvm-anagram-profiler.png (очень плохо, я не могу использовать теги изображений)

См. https://visualvm.dev.java.net/

0 голосов
/ 07 мая 2009

Вам нужен профилировщик памяти (как уже упоминали другие). Если у вас есть хороший инструмент, вы можете легко найти проблемы.

Мы используем: http://www.yourkit.com/

для нашего тестирования, он работает очень хорошо, имеет плавающие лицензии, поэтому разработчики могут использовать его локально на своих машинах.

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

Редактировать: я забыл добавить, этот инструмент интегрируется прямо в затмение.

0 голосов
/ 06 мая 2009

Если вы работаете в Windows, самый простой способ - просто контролировать, например, eclipse.exe процесс в диспетчере задач при использовании инструмента. Если ваш исполняемый файл RCP имеет другое имя, это то, что вам нужно отслеживать. В Unix вы можете использовать аналогичный инструмент (может быть, proc?).

Выполнение наиболее интенсивных доступных задач (или, если вы подозреваете, что определенные функции вызывают проблему, используйте их). Если объем памяти, используемой eclipse.exe, не увеличивается после того, как ваши интенсивные задачи были завершены, то вы, вероятно, имеете утечку. Это в конечном итоге приведет к ошибке нехватки памяти.

Вы можете ускорить ошибку нехватки памяти, уменьшив объем памяти, доступной приложению, с помощью параметра «-Xmx» в eclipse.ini (или .ini). Например. -Xmx256m означает, что доступно максимум 256 мегабайт. Очевидно, что этот параметр все еще должен быть достаточным для запуска вашего приложения, но более низкий параметр вызовет более частую сборку мусора и сделает утечки более заметными.

...