Member 13409417 Ответов: 2

Сколько объектов доступно для сборки мусора после выполнения следующего кода?


class beta{
}
class demo{
	static beta b1;
	beta b2;
	public static void main(String args[]){
		beta b1 = new beta();
		beta b2 = new beta();
		demo d1 = new demo();
		demo d2 = new demo();
		d1.b1=b1;
		d1.b2=b1;
		d2.b2=b2;
		d1= null;
		b1= null;
		b2=null;
	
	}
}


Если мы добавим System.out.println(d1.b1); внутри основного блока, то выход будет beta@3a7f1228
то есть; не нулевой.

Что я уже пробовал:

Поскольку мы все еще можем получить доступ к d1.b1, то объект d1 все еще жив, поэтому ни один из них не должен быть доступен для gc.
Скажи мне, где я ошибаюсь?
Ответ-1.

2 Ответов

Рейтинг:
2

Mehdi Gholam

Пожалуйста, перестаньте задавать подобные вопросы.

Как уже было сказано все объекты доступны для сбора мусора после main() метод заканчивается, так как программа завершается и в памяти нет активно ссылающихся объектов.


Member 13409417

@Mehdi Gholam вы не получаете мой вопрос, я прошу о приемлемости сразу после строки b2=null;

Mehdi Gholam

Как я уже сказал, Все они.

Рейтинг:
1

Richard MacCutchan

Вы заявили: b1 как статическое, так оно всегда существует.


Member 13409417

Да, но подходит ли объект d1?

Richard MacCutchan

Да, но у вас нет кода, следующего за этими тремя операторами, поэтому сборщику мусора нечего делать.