[an error occurred while processing this directive] IT • archiv :: Print

IT • archiv


[an error occurred while processing this directive]

[an error occurred while processing this directive]

Освобождение ресурсов

[an error occurred while processing this directive](none) [an error occurred while processing this directive](none)[an error occurred while processing this directive] ::
[an error occurred while processing this directive](none)
[an error occurred while processing this directive]([an error occurred while processing this directive](none)[an error occurred while processing this directive])

[an error occurred while processing this directive](none)
Java Q&A
PDF versionPDF версия

Насколько надежен метод finalize() при освобождении всех ресурсов, используемых объектом? Существуют ли иные и более зависимые методы для очистки ресурсов?

Для очистки ресурсов объекта в памяти вполне можно использовать finalizers. Например, если объект выделяет участок памяти в нативном методе, он должен обязательно освободить этот участок когда объект уничтожается, если не ранее. Finalizers пригодны для освобождения памяти, потому-что они вызываются как часть процесса сборки мусора, цель которого- освобождение памяти.

Если программа никогда не использует всю доступную память, сборщик мусора может на запускаться вообще, соответственно, не будут выполняться и finalizers. Это означает, что finalizers нельзя использовать для освобождения ресурсов, не связанных с памятью- таких, как заголовки файлов или соединения с базами данных. Хорошо спроектированный класс должен содержать методы для обязательного освобождения подобных ресурсов. А хорошо спроектированная программы должна гарантировать вызов таких методов как только используемые ресурсы больше не нужны.

Колонка Билла Виннерса (Bill Venners's) Design Techniques, "Object finalization and cleanup" обсуждает эту тему подробнее (см. Ресурсы). Единственное уточнение, которое мы можем добавить к его статье, это обсуждение опасности использования runFinalizersOnExit(), метода java.lang.Runtime. Некоторые разработчики используют этот метод для того, чтобы гарантировать вызов методов finalize() всех объектов перед завершением программы. К сожалению, это иногда вызывает вызов метода finalize() объекта перед тем, как объект высвобождается сборщиком мусора!

Принимая во внимание возможную опасность, вы должны стараться избегать использования плохо реализованного метода runFinalizersOnExit().

Об авторе

Random Walk Computing это наибольшая консалтинговая фирма в Нью Йорке, специализирующаяся на Java/CORBA решениях для предприятий. Известные своим выдающимся знанием Java, консультанты Random Walk публикуются и выступают на самых престижных форумах мира. Для связи с Random Walk используйте javaqa@javaworld.com.

Ресурсы

Reprinted with permission from the August 1999 edition of JavaWorld magazine. Copyright © ITworld.com, Inc., an IDG Communications company.
View the original article at: http://www.javaworld.com/javaworld/ javaqa/1999-08/03-qa-finalize.html

[an error occurred while processing this directive]
[an error occurred while processing this directive] Перевод на русский © Сергей Миссан, 2000
< Вернуться на caйт :: Copyright © 1999 — 2010, IT • archiv.