Объект готов для сборки мусора, Java - PullRequest
0 голосов
/ 15 августа 2011

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

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

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

Ответы [ 4 ]

4 голосов
/ 15 августа 2011

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

2 голосов
/ 15 августа 2011

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

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

1 голос
/ 15 августа 2011

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

0 голосов
/ 15 августа 2011

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...