Я хотел понять утверждение, выделенное ниже жирным шрифтом. Что это значит? (Ссылка)
объект, который переопределяет метод Finalize(), теперь должен быть определен как мусор как минимум в двух отдельных циклах сборки мусора, чтобы его можно было собрать. Когда первый цикл определяет, что это мусор, он становится пригодным для финализации. Из-за (незначительной, но, к сожалению, реальной) возможности того, что объект был «воскрешен» во время финализации, сборщик мусора должен запуститься снова, прежде чем объект можно будет действительно удалить. А поскольку финализация могла произойти несвоевременно, пока объект ожидал финализации, могло произойти произвольное количество циклов сборки мусора. Это может означать серьезные задержки при фактической очистке объектов мусора, и именно поэтому вы можете получить OutOfMemoryErrors, даже если большая часть кучи представляет собой мусор.
Что решает PhantomReference
При использовании PhantomReference такая ситуация невозможна — когда PhantomReference поставлен в очередь, абсолютно ничего не происходит. способ получить указатель на уже мертвый объект (и это хорошо, поскольку его больше нет в памяти). Поскольку PhantomReference нельзя использовать для воскрешения объекта, объект можно мгновенно очистить во время первого цикла сборки мусора, в котором обнаруживается, что он фантомно доступен. Затем вы сможете распорядиться любыми необходимыми ресурсами по вашему усмотрению.
Пожалуйста, помогите мне понять проблему и ее решение.
Спасибо
Подробнее здесь: https://stackoverflow.com/questions/313 ... nce-solves