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