Проблема с истекшим слушателем
В компьютерном программировании является проблема истекшего прослушивателя распространенным источником утечек памяти для объектно-ориентированных языков программирования, среди наиболее распространенных для языков со сборкой мусора . [1]
Оно берет свое начало в шаблоне наблюдателя , где наблюдатели (или слушатели) регистрируются у субъекта (или издателя) для получения событий . В базовой реализации это требует как явной регистрации, так и явной отмены регистрации, как в шаблоне удаления , поскольку субъект содержит сильные ссылки на наблюдателей, поддерживая их активность. Утечка происходит, когда наблюдатель не может отписаться от субъекта, когда ему больше не нужно слушать. Следовательно, субъект по-прежнему содержит ссылку на наблюдателя, что предотвращает его сборку мусора (включая все другие объекты, на которые он ссылается) до тех пор, пока субъект жив, что может продолжаться до конца приложения.
Это приводит не только к утечке памяти, но и к снижению производительности, когда «незаинтересованный» наблюдатель получает нежелательные события и реагирует на них. Этого можно избежать, если субъект будет иметь слабые ссылки на наблюдателей, что позволит собирать мусор в обычном режиме без необходимости отмены регистрации.
Ссылки
[ редактировать ]- ^ Бездельники памяти на Яве , Итан Генри и Эд Ликлама