Как избежать утечек памяти в обратном вызове?

Эффективный Java говорит:

Третий общий источник утечек памяти является слушателями и другими обратными вызовами. Если Вы реализуете API, где клиенты регистрируют обратные вызовы, но не вычеркивают из списка их явно, они накопятся, если Вы не примете некоторые меры. Лучший способ гарантировать, что обратные вызовы собраны "мусор" быстро, состоит в том, чтобы сохранить только слабые ссылки на них, например, путем хранения их только как ключей в WeakHashMap.

Я - новичок в Java. Кто-то мог учить меня, как создать слабые ссылки в обратных вызовах и сказать мне, как они решают проблемы утечки памяти?Спасибо.

20
задан unj2 18 May 2010 в 17:14
поделиться

1 ответ

Прочтите эту статью

Ключевые выводы:

Прямые ссылки можно рассматривать как сильные ссылки, которые не требуют дополнительное кодирование для создания или доступа к объект. Остальные три типа ссылки являются подклассами Ссылочный класс найден в пакет java.lang.ref. Мягкие ссылки предоставляются SoftReference класс, слабые ссылки Класс WeakReference и фантом ссылки PhantomReference.

Мягкие ссылки действуют как кэш данных. Когда системной памяти мало, мусор коллекционер может произвольно освободить объект, единственная ссылка на который является мягкой ссылка. Другими словами, если есть не являются сильными ссылками на объект, этот объект является кандидатом на выпускать. Сборщик мусора требуется для выпуска любого программного обеспечения ссылки перед тем, как бросить OutOfMemoryException.

Слабые референсы слабее мягких использованная литература. Если единственные ссылки на объект - это слабые ссылки, сборщик мусора может вернуть память, используемая объектом в любое время. Нет необходимости в низком ситуация с памятью. Обычно память используемый объектом, утилизируется в следующий проход сборщика мусора.

Фантомные ссылки относятся к очистке задания.Они предлагают уведомление непосредственно перед мусором сборщик выполняет доработку обрабатывает и освобождает объект. Рассмотреть возможность это способ выполнять задачи по очистке в объект.

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

12
ответ дан 30 November 2019 в 01:08
поделиться
Другие вопросы по тегам:

Похожие вопросы: