Пользовательский CacheInterceptor переопределяется по умолчанию в CacheInterceptor Spring

По конкретному вопросу: «Будет ли сбор pclass быть собранным»: подписка на событие не влияет на сбор pClass (как издатель).

Для GC вообще (в частности, цель) : зависит от того, является ли MyFunction статическим или основанным на экземпляре.

Делегат (например, подписка на события) к методу экземпляра включает ссылку на экземпляр. Так что да, подписка на события предотвратит GC. Однако, как только объект, публикующий событие (pClass выше), имеет право на сбор, это перестает быть проблемой.

Обратите внимание, что это односторонний; т.е. если у нас есть:

publisher.SomeEvent += target.SomeHandler;

, тогда «издатель» сохранит «цель», но «цель» не сохранит «издателя».

Итак, нет: if pClass собирается собираться в любом случае, нет необходимости отписывать слушателей. Однако, если pClass долговечен (длиннее экземпляра с MyFunction), то pClass может сохранить этот экземпляр живым, поэтому будет необходимо отказаться от подписки, если вы хотите, чтобы цель была собрана.

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

4
задан Mykola Yashchenko 22 March 2019 в 12:23
поделиться