2015-08-03 2 views
1

Эффективный Java-элемент 7 говорит, что финализаторы вызывают проблемы с переносимостью.финализаторы вызывают проблемы с переносимостью - как?

Финализаторы непредсказуемы, часто опасны и вообще не нужны. Их использование может вызвать неустойчивое поведение, низкую производительность и проблемы с переносимостью.

Но я не мог понять, что Java является платформой независимо от того, как финализатор может вызвать проблемы с переносимостью?

+0

Возможно, вам потребуется прочитать [это] (http://www.informit.com/articles/article.aspx?p=1216151&seqNum=7) – MaxZoom

ответ

4

Финализаторы обычно содержат код, который освобождает ресурсы, не относящиеся к JVM (системе). Если им поручено управление ресурсами, они создают очень необычные шаблоны жизненного цикла ресурса (огромное количество ненужных ресурсов + выпуск сразу нескольких ресурсов). Это действительно звучит опасно, и на каждой еще непроверенной платформе это создает угрозу взрыва непредсказуемо.

+1

Например, возможно, вы проверите свой код на системе, которая позволяет открыть 20 000 файлы за один раз и относительно небольшая память (и, следовательно, более частая GC и, таким образом, финализация), но ваш клиент находится в системе, которая позволяет только 10 000 открытых файлов одновременно и имеет больше памяти (поэтому меньше GC, файлы закрываются реже) , В этом случае все будет нормально работать в вашем тестовом env, но не удастся на сайте вашего клиента (из-за того, что файлы были израсходованы). – yshavit

Смежные вопросы