Я читал "Эффективное программирование Java Joshua Bloch. Я эта книга он советы не использовать "завершить" блок в качестве, который, как не гарантируют, будет выполняться. Кто-либо может объяснить немного больше на этом или дать ссылку некоторой статьи, которая объясняет это подробно?
Другая проблема с финализаторами, помимо упомянутой andrewmu, связана с часто создаваемыми / уничтожаемыми объектами.
Когда вы определяете финализатор для класса, имеющего высокую скорость создания / уничтожения, вы добавляете нагрузку в поток финализатора, возможно, замедляя скорость сбора мусора этих объектов. Вместо того, чтобы немедленно освобождаться при выполнении сборки мусора, эти объекты ждут в очереди потока финализатора, чтобы быть завершенными первыми. Это увеличивает риск ошибки нехватки памяти.
Одна из проблем с finalize заключается в том, что он не будет вызываться, если ваша программа вызовет System.exit ()
- для решения этой проблемы, я думаю, Джош Блок предлагает вам использовать Runtime.addShutdownHook ()
вместо этого.
плюс: если вы забудете вызвать super.finalize () , это может быть ошибкой. поэтому реализация finalize () подвержена ошибкам .