Life Cycle Объект
программа Java создает множество объектов из разных классов. Объект в Java взаимодействует, отправляя сообщения друг другу. После того, как они закончили обработку, эти объекты затем собирают мусор. После процесса сбора мусора операционная система требует возврата ресурсов, выделенных этим объектам, которые будут в дальнейшем использоваться новыми объектами.
Ниже приведены этапы, на которых объект Java проходит через свой жизненный цикл:
1. Класс Loading
Перед созданием объекта из класса, класс должен быть загружен в память из диск. Загрузчик класса java загружает файл класса в память.
Когда класс загружен?
Статические инициализаторы
Java ищет любые статические инициализаторы и инициализирует статические поля, которые являются частью класса и не являются частью конкретного экземпляра класса (объекта).
3. Создание объекта
Объект является экземпляром класса. Он создается в следующих ситуациях:
Декларация: когда вы объявляете объект, например. ClassA objA; Активация: когда новый используется для размещения нового объекта в памяти кучи, например. новый ClassA(); Инициализация: создается новый объект, например. ClassA(); 4. Использование объекта
на данном этапе программы могут использовать объект либо путем доступа к полям, либо вызовам.
5. Очистка
Это последняя фаза Java объектов, где они получают переработаны и память востребована ОС.
Что происходит при уничтожении?
Объект удален из памяти. Java отбрасывает свои внутренние ссылки на этот объект. Сбор мусора (GC), который освобождает объекты, которые больше не нужны, т. Е. Нет ссылок на этот объект. Завершение: GC дает объектам последнюю возможность для очистки любых других ресурсов путем вызова метода finalize().
если есть?
Когда объект выходит за пределы сферы действия. т. е. {... objA ...}, здесь} становится областью. в это время время выполнения Java проверяет ссылки и позволяет GC перерабатывать этот объект. , когда количество ссылок на этот объект в java-памяти времени выполнения становится равным нулю (0). , когда объект явно установлен на нуль, т.е. objA = null ;, GC вызван метод finalize() явно вызван.
@duffymo: Разве это не зависит от того, существует ли ссылка на вновь созданный объект после возврата функции? объект, хранящийся в коллекции, находящейся в области вызова. – Cratylus
@user - В этом случае область действия объекта изменилась и не может быть затронута GC. – Jeremy
«Объекты, созданные в области методов ...» для меня означает, что он не был передан пользователем. Вы правы в одном: если объект, созданный в области видимости, возвращается в качестве возвращаемого значения, то вызывающий может удерживать ссылку и не допускать ее gc'd. Я исправлю свой ответ. – duffymo