Узнайте, какие объекты выпускает сборщик мусора: - PullRequest
0 голосов
/ 13 марта 2012

Я пытаюсь найти утечки памяти в программе, которую я не проектировал (я новичок в проекте). Поскольку это довольно большая программа, у меня возникли некоторые проблемы. Я пробовал несколько профилировщиков, и большинство из них зависали или зависали при попытке проследить трассировку стека выделения, чтобы увидеть, какие объекты занимают всю память.

Я запускаю System.gc(); в потоке и пытаюсь выяснить, что именно он выпускает / освобождает. Из профилировщика я вижу, что он выпускает, но мне нужно знать, что он выпускает.

Есть ли какой-нибудь способ получить информацию во время выполнения от сборщика мусора о том, какие объекты он освобождает / освобождает?

Если нет, или если это плохой способ даже думать о попытке приблизиться к этому, любые другие предложения будут оценены.

Ответы [ 3 ]

2 голосов
/ 13 марта 2012

Мой предпочтительный способ обнаружения утечек памяти - запуск дампа кучи, либо ожидание его возникновения (после OOM) с использованием -XX:+HeapDumpOnOutOfMemoryError в качестве параметра запуска JVM, либо «по требованию» с использованием jsconsole / jmap.

Затем запустите (обычно большой) файл дампа через превосходный MAT http://www.eclipse.org/mat/

1 голос
/ 13 марта 2012

Я бы использовал профилировщик памяти, чтобы найти утечку памяти. Вы можете начать с VisualVM. это может найти вашу проблему, но если она не попробует пробную версию коммерческого профилировщика, такого как YourKit.

Эти инструменты могут не только сказать вам, что отбрасывается, но и где оно создается в первую очередь. Он имеет графический интерфейс, поэтому вы можете увидеть самый большой или самый многочисленный.

0 голосов
/ 13 марта 2012

У меня нет точного решения, какой объект будет реализован System.gc ();

, но JAVA предоставляет встроенный инструмент GUI для Консоли мониторинга и управления JAVA

вы нашли jconsole в папке java / bin для его запуска: используйте команду

cd $JAVA_HOME/bin
./jconsole
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...