Уничтожение объекта и метод finalize()

Уничтожение объекта и метод finalize()В некоторых объектно-ориентированных языках, в частности в C++, есть явные деструкторы, предназначенные для уничтожения объектов. Основная их задача — освобождение памяти, занятной объектами. Поскольку в языке Java реализован механизм автоматической сборки мусора, освобождать память вручную нет никакой необходимости, поэтому в языке Java деструкторы отсутствуют.

Разумеется, некоторые объекты используют кроме памяти и другие ресурсы, например файлы, или обрабатывают другие обьекты, которые в свою очередь, обращаются к системным ресурсам. В этом случае очень важно, чтобы ресурсы вовремя освобождались.В любой класс можно добавить метод finalize(). Этот метод будет вызван перед тем, как система «сборки мусора» уничтожит объект. На практике, если вам нужно возобновить ресурсы и сразу использовать их повторно, нельзя полагаться на метод finalize(), — вы не знаете когда именно этот метод будет вызван.

Существует метод System.runFinalizerOnExit(true), гарантирующий, что метод finalize() будет вызван до того, как программа завершит свою работу. Однако этот метод крайне ненадежен и не рекомендован к использованию. В качестве альтернативы можно применить метод Runtime.addShutdownHook(). Дополнительную информацию о нем можно найти в документации по API.

Если ресурс должен быть освобожден сразу после его использования, нужно самостоятельно написать соответствующий код. Добавьте метод dispose() или close(), который нужно явно вызвать для очистки памяти. Если класс имеет такой метод, вы должны вызвать его по завершении работы с объектом этого класса.

У вас пропали данные с жесткого диска? Советуем вам быстрое восстановление данных с жесткого диска. Все по самым доступным ценам.