Можно ли «увидеть» граф объектов для сборки мусора? - PullRequest
4 голосов
/ 06 августа 2009

У меня есть Java-приложение с утечкой памяти. Я знаю, какие объекты не освобождаются во время сборки мусора, но я не могу понять, что на них ссылается.

Возможно ли вообще иметь какую-то видимость графа объектов, который внутренне поддерживается JVM?

Можно ли вообще узнать, какие объекты ссылаются на другой объект?

Ответы [ 2 ]

4 голосов
/ 06 августа 2009

На самом базовом уровне вы можете использовать команды jhat и jmap для чтения файла кучи из запущенного процесса Java, а затем обработать его - он запускает небольшой веб-сервер на локальном порту. Это не совсем легко читать, но вам не нужно покупать профилировщик, чтобы использовать его.

1 голос
/ 06 августа 2009

Профилировщики делают это. JProfiler например. В тот день я использовал Optimizeit (который сейчас кажется мертвым).

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

...