Нужно понимать рабочий процесс сборщика мусора (GC), чтобы понять функцию финализации. вызов .finalize () не вызовет сборщик мусора и не вызовет system.gc. На самом деле, то, что finalize поможет кодировщику, это объявить ссылку на объект как «не имеющую ссылки».
GC принудительно приостанавливает работу JVM, что ухудшает производительность. Во время работы GC будет проходить по всем ссылочным объектам, начиная с корневого объекта (вызов вашего основного метода). Это время приостановки может быть уменьшено, если вручную объявить объекты как не связанные, так как это сократит операционные затраты, чтобы объявить ссылку на объект устаревшей в результате автоматического запуска. Объявляя finalize (), кодер устанавливает ссылку на объект устаревшим, поэтому при следующем запуске операции GC прогон GC будет подметать объекты без использования времени операции.
Цитата: "После того, как метод finalize был вызван для объекта, никакие дальнейшие действия не предпринимаются, пока виртуальная машина Java снова не определит, что больше нет никаких средств, к которым этот объект может быть доступен любому потоку, который все еще умер, включая возможные действия других объектов или классов, которые готовы к финализации, и в этот момент объект может быть отброшен. "из Java API Doc на java.Object.finalize ();
Для подробного объяснения вы также можете проверить: javabook.computerware