Получение более подробной информации о конкретной утечке памяти - PullRequest
0 голосов
/ 27 августа 2011

Моя утечка памяти выглядит так: leak

Не имея такого большого опыта работы с Eclipse Memory Analyzer, мне интересно, может ли он ответить на эти два вопроса:

  • Какова позиция исходного кода, где было выделено большинство этих экземпляров?
  • По какой причине они не были собраны мусором?
    1. Они остановились, но на них все еще есть ссылки?
    2. Они все еще исполняются или спят?

РЕДАКТИРОВАТЬ: Похоже, sbridges был прав, и мои темы просто никогда не умирают. Однако я не совсем уверен в причине, так как трассировка стека, кажется, не содержит никакого моего кода. То, как я использую ExecutorService, должно быть как-то не так.

threads

1 Ответ

3 голосов
/ 27 августа 2011

Где-то ваш код создает потоки, и эти потоки никогда не умирают. Потоки не могут быть сборщиком мусора, так как поток является корнем gc. Самый простой способ отладки - запустить приложение, подождать, пока у вас будет большое количество потоков, затем подключиться к приложению с помощью JConsole и посмотреть на следы стека потоков. Чтобы увидеть следы стека, нажмите на вкладку потоков и нажмите на поток под живыми потоками.

...