Objetos elegíveis para o GB

8 respostas
giselezr

Oi pessoal

public class Tahiti {

	Tahiti t;
	
	public static void main(String[] args) {
		Tahiti t = new Tahiti();
		Tahiti t2 = t.go(t);
		t2 = null;
	}
	
	
	Tahiti go (Tahiti t){
		Tahiti t1 = new Tahiti();
		Tahiti t2 = new Tahiti();
		t1.t = t2;
		t2.t = t1;
		t.t = t2;
		return t1;
	}

}

quantos objetos estão elegíveis para o GB?

minha resposta seria 2, pq esta setando null para t2 e dentro de t2 tem um Tahiti, porem a resposta certa é zero objetos, sera que alguém pode me explicar?

abraço

8 Respostas

DaniloAndrade

esquece falei asneira

rafadelnero

A referência do t2 continua viva, pois foi passada a outra variável.Assim o GC não coleta.

É importante ressaltar que as variáveis locais do método morrem no mesmo.Apenas as variáveis de instância permacem vivas na classe.

Que também é a chave da questão.

Nesse trecho do código, como a variável Tahiti t2 = new Tahiti(); foi declarada no método, ao final não terá mais os valores anteriores.

A

Olá , de qual parte que ele está falando que os objetos estão elegíveis? depois q o programa acaba ou depois que o meotodo go termina?

giselezr

Quando acaba o programa. Mas ainda não consegui entender, por mesmo depois de setar a variável para outras no final das contas seta null…

rafadelnero

Os objetos continuam vivos, as referências é que morrem, ou seja apenas o controle que aponta para o objeto que está no heap.

A

Realmente não entendi a questão, já que após o programa acabar 3 objetos estão elegíveis para GBC. pois nenhuma thread está disponível para alcançá-los, já que o thread da main já acabou… Deve ser de outro trecho que a questão esteja perguntando.

A definição de que um objeto poderá ser coletado para GB é que nenhuma thread viva consegue alcançá-lo. Daí vc faz um esquema com as variáveis e os objetos , e quem está apontando pra quem em determinado ponto. Depois disso vc ver quantos objetos estão “soltos”, sem nenhuma referência para ele .

F

[quote=rafadelnero]A referência do t2 continua viva, pois foi passada a outra variável.Assim o GC não coleta.

É importante ressaltar que as variáveis locais do método morrem no mesmo.Apenas as variáveis de instância permacem vivas na classe.

Que também é a chave da questão.

Nesse trecho do código, como a variável Tahiti t2 = new Tahiti(); foi declarada no método, ao final não terá mais os valores anteriores.

Boa explicação!
:smiley:

rafadelnero

Valeu, hehe, quiz deixar bem claro mesmo!

Criado 30 de janeiro de 2013
Ultima resposta 1 de fev. de 2013
Respostas 8
Participantes 5