Не думаю, что это действительно важный ресурс, несмотря на использованную фразу.Я думаю, что он восстанавливает ресурс, который может или не может быть критическим, и цитату можно перефразировать, «предполагая, что это не критично, что ресурс освобожден».
Если важно, чтобы ресурс был освобожденконкретный момент выполнения программы, после того, как объект недоступен, но до того, как ресурс понадобится для какой-либо другой цели, финализатор не подходит.Вместо этого вам нужна программная логика, чтобы убедиться, что это происходит.
Таким образом, дескрипторы файлов или соединения с БД имеют решающее значение, если вы беспокоитесь о том, что можете закончиться, иначе они не критичны.Если вы достигли некоторого предела количества открытых соединений с БД, потому что финализаторы, которые закрывают ваши старые, еще не запущены, и вы пытаетесь открыть другое соединение с БД, скорее всего, это не удастся.Ситуация с памятью несколько лучше, поскольку, если у вас не хватает памяти из-за недоступных объектов и вы пытаетесь создать новый объект, GC по крайней мере попытается найти что-то для завершения и освобождения.
Таким образом, файловые дескрипторы и соединения БД должны иметь функцию close()
, которую пользователь может вызвать для освобождения всех ресурсов в тех случаях, когда логика программы может определить, что объект больше не будет использоваться.Ожидать, что GC закроет соединение через финализатор, недостаточно надежно.Это также не очень хорошо справляется с возможностью сброса или сброса коммита, хотя это отдельная проблема.