Объект готов для сборки мусора, Java

В http://java.sun.com/docs/books/performance/1st_edition/html/JPAppGC.fm.html примере A3.3 говорится, что в нем говорится, что объект все еще может быть недоступен для сбора мусора, даже если он может быть вне области. ЭТО доступно, только если метод снят со стека. Теперь, если мы рассмотрим следующий случай:

void foo(){
Dog a = new Dog();
Dog b = new Dog();
b=a
while(true)//loop for long time
}

Будет ли объект b ссылаться на доступность немедленно для сборки мусора или только после того, как будет возвращен метод foo().

4 ответа

Решение

Слот стека остается в использовании, пока метод не выйдет. Не существует кода операции JVM, соответствующего внутреннему}, поэтому JVM не знает, что он вышел из внутренней области видимости. Но он знает, когда метод возвращается.

Собака раньше знала как b должен получить право на сборку мусора, как только вы переопределите переменную.

Собака, известная как оба a а также b (после этого переназначения) останется в области действия до конца метода.

Оригинал b (второй Dog создал) сразу же доступен для сборки мусора до начала цикла, потому что на него нет ссылки (оба a а также b ссылка первая Dog создано).

За исключением правильных ответов, ваш тест по существу неверен. Работает пустым while Цикл никогда не будет запускать GC, поскольку он запускается (чтобы немного упростить), когда у вас заканчивается память, а Java необходимо выполнить некоторую очистку старых объектов.

Другие вопросы по тегам