Я перечитал множество вопросов о новичке в Java finalize()
и обнаружил, что это немного сбивает с толку, что никто не дал понять, что finalize () - это ненадежный способ очистки ресурсов. Я видел, как кто-то комментирует, что он использует его для очистки соединений, что действительно страшно, поскольку единственный способ приблизиться к гарантии закрытия соединения - это реализовать try (catch) в конце концов.
Я не учился в CS, но я профессионально программирую на Java уже почти десять лет, и я никогда не видел, чтобы кто-нибудь реализовывал finalize()
в производственной системе. Это по-прежнему не означает, что он не имеет смысла или что люди, с которыми я работал, делали это правильно.
Поэтому мой вопрос: какие варианты использования существуют для реализации, finalize()
которые не могут быть обработаны более надежно с помощью другого процесса или синтаксиса в языке?
Пожалуйста, предоставьте конкретные сценарии или ваш опыт, просто повторения учебника по Java или окончательного использования по назначению недостаточно, поскольку цель этого вопроса не в этом.
finalize()
. Однако код библиотеки платформы , например SocketInputStream
, который управляет собственными ресурсами от имени вызывающей стороны, делает это, чтобы минимизировать риск утечек ресурсов (или использует эквивалентные механизмы, такие как PhantomReference
, которые были добавлены позже). Таким образом, экосистема нуждается в них хотя 99,9999% разработчиков никогда не напишут.