Можно было бы иметь семантику, подобную тому, что вы описываете, если слабая ссылка с уведомителем рассматривалась аналогично объекту с финализатором, то есть когда объект считался более не интересующим кто угодно, он будет поставлен в очередь на доработку и уведомление; запись в очереди будет считаться живой ссылкой, поэтому объект фактически не будет собран до тех пор, пока он не будет действовать.
Поскольку это невозможно, наилучшим возможным подходом может быть, что все ссылки «Я заинтересован в этом объекте» указывает на легкий объект-оболочку, который, в свою очередь, указывает на реальный объект и имеет «Слабые» ссылки указывают на другую оболочку, которая также указывает на реальный объект. Первая обертка должна содержать ссылку на вторую, но не наоборот. Первая оболочка должна иметь финализатор, который запускает соответствующий код, когда он выходит за рамки.
К сожалению, я не видел никаких реализаций такой стратегии. Есть несколько важных моментов для рассмотрения. Среди них: (1) финализаторы никогда не должны ждать на замках и не делать ничего, что могло бы вызвать исключение; (2) код, который обращается к другим объектам, которые могли выйти из сферы действия, должен быть подготовлен для возможности того, что они, возможно, уже были доработаны, находятся в процессе окончательной доработки, ждут завершения или остаются живые ссылки в другом месте; (3), если финализатор хранит привязанные ссылки к завершаемому объекту, который был найден подходящим для сбора мусора, такой объект может быть завершен, даже если существует ссылка на живую.
Я предполагаю, что это так же естественно, как любое, чтобы обновить сериализованные данные. Спасибо за информацию! –