Во многих средах управления памятью, собираемых мусором и другим образом, освобождение памяти в приложении, как правило, не приводит к тому, что приложение освобождает эту память, а вместо этого фиксирует тот факт, что память должна быть доступна для будущих запросов.Часть идеи, стоящей за сборкой мусора, заключается в том, что когда пользовательский код запрашивает память и приложение знает, что у него по крайней мере столько же доступной сразу, ни код, ни приложение не будут заботиться о том, «распределена» ли какая-либо память, не необходимая для этого запроса.или "бесплатно".Когда последняя достижимая ссылка на объект уничтожается или становится недоступной, объект фактически сразу же перестает существовать, но, как правило, нет особой цели пытаться восстановить память, ранее использовавшуюся несуществующими объектами, до тех пор, пока такая рекламация не потребуется длявыполнить запрос на выделение, или соотношение «количество освобожденной памяти за время, потраченное на него» настолько велико, насколько вероятно его получить.
Обратите внимание, что для восстановления системой памяти, связанной с объектом, абсолютно необходимо, чтобыссылка любого вида существует на этот объект.Если существуют доступные достижимые слабые ссылки на объект, который иначе недоступен, сборщик мусора должен сделать недействительными все такие ссылки (чтобы они больше не идентифицировали объект), прежде чем пространство, используемое объектом, может быть освобождено.Если недоступный в противном случае объект имеет зарегистрированный финализатор, система должна поместить объект в очередь вещей, требующих немедленной финализации (что делает его непригодным для восстановления), и отменить регистрацию финализатора.
Слабые ссылки и используемые ссылкидля финализации оба автоматически аннулируются GC, когда все другие ссылки на объект отбрасываются, и, таким образом, не вызывают утечек памяти.Однако есть и другой тип ссылки , который может вызвать неприятные утечки : подписки на события от издателей, которые переживают подписчиков.Если объект A подписывается на событие из объекта B, объект A не может быть собран сборщиком мусора, если либо (1) он не отписывается от события, либо (2) B сам не получает права на сборку мусора.Я озадачен тем, почему Microsoft не включила некоторые средства автоматической отмены подписки на события, но они этого не сделали.