Проблема с завершающим блоком - PullRequest
1 голос
/ 05 августа 2010

Я читал «Эффективное программирование на Java Джошуа Блоха. В этой книге он советует не использовать блок« финализировать », так как его выполнение не гарантировано. Может кто-нибудь объяснить подробнее об этом или дать ссылку на какую-то статью» что объясняет это в деталях?

Ответы [ 3 ]

1 голос
/ 05 августа 2010

Другая проблема с финализаторами, помимо упомянутой andrewmu, связана с часто создаваемыми / уничтожаемыми объектами.

Когда вы определяете финализатор для класса, имеющего высокую скорость создания / уничтожения, вы добавляете нагрузку в поток финализатора, возможно, замедляя сбор мусора этих объектов. Вместо немедленного освобождения, когда происходит GC, эти объекты ждут в очереди потока финализатора, чтобы сначала завершиться. Это увеличивает риск ошибки нехватки памяти.

1 голос
/ 05 августа 2010

Одна проблема с finalize заключается в том, что он не будет вызываться, если ваша программа вызывает System.exit() - для решения этой проблемы, я думаю, Джош Блок предлагает использовать вместо него Runtime.addShutdownHook().

0 голосов
/ 21 августа 2010

плюс: если вы забудете вызвать super.finalize () , это может быть ошибкой.таким образом, реализация finalize () подвержена ошибкам .

...