Exercicio sobre Garbage Colector

4 respostas
F
class Beta { }

class Alpha {
	static Beta b1;
	Beta b2;
}

public class Tester {
	public static void main(String[] args) {
		Beta b1 = new Beta();
		Beta b2 = new Beta();
		Alpha a1 = new Alpha();
		Alpha a2 = new Alpha();

		a1.b1 = b1;
		a1.b2 = b1;
		a2.b2 = b2;
		
		a1 = null; b1 = null; b2 = null;

	}
}

Esse é um exercício do livro da certificação OCJP
o questionamento é sobre quantos objetos estão elegíveis para o GC, as opções são as seguintes :

A. 0
B. 1
C. 2
D. 3
E. 4
F. 5

Eu marquei ( e com convicção ) a resposta C, mas a correta é a B
sinceramente não entendi, será que alguém poderia me explicar ?

4 Respostas

asousaj

fcoromoto,
Você marcou 2 porque considerou que o objeto criado em “Beta b1 = new Beta();” também estaria disponível para o GC porem ele está sendo usado na variável ESTATICA b1 da classe Alpha.

A

Neste exemplo temos a criação de 4 objetos ( através do new ) sendo que é feita a referência para dois desses objetos ( através das atribuições a1.b1 ,a1.b2, etc) e depois temos a atribuição null para 3 deles : a1,b1,b2. só que dois deles ainda possuem referência apontando para eles (a1.b1, a1.b2, a2.b2) portanto não estarão os objetos disponíveis para GC , apenas o objeto criado pela referência a1 terá nenhuma thread apontando para ele. O objeto da referência a2 não é apontado para null. Portanto teríamos apenas 1 objeto disponível. Lembrando que somente os objetos estarão disponíveis para GC quando nenhuma thread viva consegue alcançá-los.

Ajudou ou complicou , qq coisa pode falar.

A

A minha dúvida para esta questão ( e particularmente eu já não lembro mais disso) é que quando o programa encerra todos os 4 estarão disponíveis ou somente 1? pois depois que o programa encerra não existirá mas nenhuma Thread para alcançá-lo. OU neste caso a questão está falando em uma linha específica para GC ?

F

asousaj:
fcoromoto,
Você marcou 2 porque considerou que o objeto criado em “Beta b1 = new Beta();” também estaria disponível para o GC porem ele está sendo usado na variável ESTATICA b1 da classe Alpha.

Ah entendi, é isso mesmo
vlw ae.

Criado 21 de março de 2013
Ultima resposta 21 de mar. de 2013
Respostas 4
Participantes 3