Возможная утечка памяти через FinalizerReference
У меня есть небольшое приложение для Android, и я попытался найти утечки памяти, поэтому я нажал "Дамп Java-кучи", а первый класс в списке - FinalizerReference (java.lang.ref). Он имеет более 500 экземпляров, каждый из которых имеет "следующий" и "предыдущий" для другого FinalizerReference.
Я знаю, что FinalizerReference происходит от объектов, которые реализуют Object.finalize(), но у меня нет объекта в моем приложении, которое его реализует. Как я могу узнать, почему эта утечка происходит и исправить?
![введите описание изображения здесь]()
Ответы
Ответ 1
Подробнее о вашей проблеме см. в поле референта вашего Finalizer
.
Объекты Finalizer просто расширены Reference
s, поэтому вы можете исследовать содержимое. Он предоставит вам информацию о завершающих объектах.
В зависимости от контента у вас появятся новые лидеры. Возможно, процесс завершения для ожидающих объектов очень длинный. Поскольку у вас есть только один поток, обрабатывающий их все, вы можете каким-то образом завершить работу над чем можете.
Приветствия
Ответ 2
Вероятно, в вашем приложении нет утечки памяти, связанной с FinalizerReference, хотя Android Memory Profiler делает его похожим на существующее.
Мои исследования подобных проблем убедили меня в том, что Profiler выполняет массивный многократный подсчет одного и того же небольшого объема памяти в случае FinalizerReference, так что сообщаемое значение сохраненной памяти бессмысленно, а иногда даже смешно.
В вашем случае неглубокий размер ~ 38 кБ важен, но мал, а оставшуюся память ~ 40 МБ следует игнорировать.