2013-03-07 4 views
0

У меня есть 6 отдельных java Classes A,B,C,D,E and F.Сбор мусора подходящих объектов

Class A создает объект Class B и звонит по методу в Class B.

Class B метод создает объект class C и вызывает метод в class C.

Class C метод создает объекты классов D,E,F и называет их методы.

+0

Я думаю, вы имеете в виду все объекты в упомянутом графике. Не все объекты данных классов. Если объекты указанных типов были построены в другом месте, они не будут GC'ed –

ответ

0

Да. Это будет. Поскольку родительский класс теперь ссылается на null и является сиротой, все ссылочные объекты ниже него будут иметь право на GC.

Объект попадает в недоступное состояние, когда нет более сильных ссылок на него. Когда объект недоступен, он является кандидатом для сбора

HTTP: // 192.9.162.55 /docs/books/performance/1st_edition/html/JPAppGC.fm.html

+0

Проверьте также следующую ссылку: http://stackoverflow.com/questions/2433261/when-and-how-are-classes-garbage-collected -in-java –

0

Да, они будут иметь право на получение сбор мусора дает одно условие, если они созданы внутри методов, то есть локально, тогда они имеют право на участие, а также, если они являются экземплярами переменных объектов, тогда только копия этого объекта, которая установлена ​​в нуль, будет иметь право на gc.

+0

Ссылка на объект для класса B - это один локальный объект. Будет ли все объекты класса C, D, E, F иметь право на gc? – user1929905

+0

Нет, вы должны знать основные. Для каждого объекта все переменные экземпляра имеют разную копию. Поэтому, если вы назначаете null одному объекту B, то только копии внутри этого объекта (которые являются объектами C, D, E, F) будет собран мусор. –

+0

Найдите эти основные вещи, и у вас будет много чего читать. –

0

Да. «Объект имеет право на сбор мусора, если больше нет ссылок на этот объект».

Так что, если b больше не ссылается, он имеет право на gc. Когда в свою очередь он собирается, больше нет ссылок на c, поэтому c становится подходящим, и поэтому история продолжается.

0

GENERALLY да, но без дополнительной информации мы не можем сказать наверняка.
В качестве примера можно привести, если скажем, C, ссылается на экземпляры D, которые он создает в коллекции, которая хранится в сеансе http или транзакции EJB (или хранит ссылку там напрямую). Если это произойдет, эти ссылки будут препятствовать тому, чтобы соответствующие экземпляры D были собраны в мусор, и все, на что они ссылаются.

+0

Мои классы используют коллекции, но не используют httpsession или ejb related stuff.will они имеют право сейчас? – user1929905

+0

@ user1929905 это зависит. Пока существует ссылка в коллекции, и эта коллекция сама по себе не имеет права на сбор мусора, экземпляр, на который ссылаются ссылки, также не подходит.Поэтому, если у вас есть коллекция в классе, вызывающем A, который был передан методу в A, который добавил ссылку на B в эту коллекцию B, останется до тех пор, пока она останется в этой коллекции, если сама коллекция не будет удалена. – jwenting

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