2015-03-02 4 views
0

Поскольку существует так много объектов, созданных для определенного класса, некоторые из которых могут быть указаны, а некоторые могут быть анонимно лежат в куче и, следовательно, доступны для сбора мусора. Таким образом, наличие даже одного объекта без ссылки в куче достаточно для запуска сборщика мусора или существуют какие-либо другие критерии для обеспечения сбора сборщика мусора.Сборщик мусора не запускается, когда объект ссылается. Какой объект?

Благодаря

Джаендра

+0

Вы всегда можете принудительно выполнить сборку Garbace Collector с помощью 'System.gc()'. Что касается условия автоматического выполнения, оно не указывается. Итак, не основывайте свой код на нем. –

+9

@AntonioRagagnin вы не можете * force * gc исполнение. Вы можете только * запросить JVM. – Dia

+1

@ AntonioRagagnin Неправильно. 'System.gc()' ничего не делает. Он просто сообщает JVM, что вы хотите запустить сборку мусора прямо сейчас, но JVM не нуждается в том, чтобы следовать этой симпатии вообще. Он может даже решить запустить всего 2 заявления после вашего звонка. На практике вы не должны полагаться на 'System.gc()' что-либо делать вообще. – mhlz

ответ

2

мы не знаем, когда GC получить казнены, это зависит от многих вещей например Тип GC. Также вы можете рекомендовать VM для запуска GC, выполнив System.gc(). Но опять же это всего лишь рекомендация

+0

метод finalize() может использоваться для обнаружения, когда объект будет удален gc –

+2

@FastSnail, который вы можете сделать объект, на который ссылается метод 'finalize()', и он не будет GCed. – Dia

+0

finalize() вызывается для объекта, когда GC определяет, что больше нет ссылок на объект. Это еще не гарантируется, когда и если GC когда-либо вызывается на объект. – jdv

1

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

Как указано в комментариях, System.gc() является всего лишь подсказкой или запросом. В очень многих случаях это приведет к полному GC. Но подумайте, что сбор кучи дампа обычно приводит к 2-3 вызовам System.gc() перед созданием дампа, главным образом как способ улучшить шансы на это.

Есть экспериментальные виртуальные машины, которые предлагают различные реализации гарантий реального времени, где некоторые из них неверны.

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