6

Только сегодня я обнаружил утечку памяти в моем приложении с большим количеством объектов, созданных как анонимные классы. Классическим примером было то, что каждый объект имел свой собственный класс, определенный и помещенный в кучу.Как найти GC-корни Анонимных классов в java?

Непросто было найти в профайле памяти времени выполнения и анализ дампа кучи, выполненный Eclipse Memory Analyzer, тоже не помог.

Мне было интересно, как регистрировать все анонимные классы, созданные во время выполнения с идентификатором потока (или, по крайней мере, родительским загрузчиком классов).

Я думаю, что эта единственная вещь сама по себе заставила бы найти первопричину тривиальной.

ответ

1

Я не уверен, что перечисление всех анонимных классов приведет вас в любом месте, их, как правило, много.

Возможно, вам нужна логика для поиска экземпляров классов, которые сохраняются ссылками на внутренние классы (которые включают анонимные классы).

В JProfiler, есть соответствующая инспекция:

enter image description here

Объект установлен создать с помощью проверки содержит все такие случаи, и вы можете затем показывают пути к корню GC:

enter image description here

Отказ от ответственности: Моя компания разрабатывает JProfiler.