Dúvida sobre Coleta de Lixo

7 respostas
Cris_Finholdt

No livro da Kathy tem a seguinte questao:

public class Eco {
	public static void main(String[] args) {
		Eco e1 = new Eco();
		Eco e2 = new Eco();
		Eco e3 = new Eco();
		e3.e = e2;
		e1.e = e3;
		e2 = null;
		e3 = null;
		e2.e = e1;
		e1 = null;
	}
                Eco e;
}

Em que ponto há apenas um objeto qualificado para a coleta de lixo?

a. Após a execução da linha 8.
b. Após a execução da linha 9.
c. Após a execução da linha 10.
d. Após a execução da linha 11.
e. A compilação falha.
f. Nunca nesse programa.
g. É lançada uma exceção no tempo de execução.

Resposta: G está correta. Um erro na linha 10 faz com que seja lançada uma NullPointerException, porque e2 foi definida como null na linha 8. Se a linha 10 fosse colocada entre as linhas 7 e 8, então F estaria correta, porque até que a última referência seja anulada, nenhum dos objetos estará qualificado, e depois de anulada a última referência, todos os três estarão qualificados.

A resposta ser letra G até que eu entendi, apesar de não concordar pq a pergunta foi “Em que ponto há apenas um objeto qualificado para a coleta de lixo?” e não “Qual é o resultado?”. Mas a minha dúvida é que eu não vi em nenhuma parte do livro sobre a última referência ter que ser anulada pra q todos os objetos estejam qualificados. Não entendi direito essa parte. Alguem poderia me explicar mehor? Porque pra mim, se a linha 10 fosse colocada entre as linhas 7 e 8, então a opção “a. Após a execução da linha 8.” estaria correta, que é onde o primeiro objeto é setado com null.

7 Respostas

T

Cris, como não tenho o livro da Kathy aqui, poderia indicar na questão onde é que é a linha 1, 2, etc.? É que do jeito que está formatado o código não sei exatamente qual seria a linha 10, por exemplo.

pmlm

As opções “Não compila” e “Erro de execução” aparecem em muitas questões. Muitas vezes o tema da questão é uma rasteira, como neste caso.

B

Não Cris. Na verdade a pergunta ficou um pouco confusa. Ela diz “Em que ponto há apenas um objeto qualificado”. Neste código, após a execução da linha 11, ocorrerá a chamada “island of isolation”, onde os objetos estarão interligados entre si através de suas variáveis de instância, dentro do heap, mas ao mesmo tempo não haverá nenhuma referência à qualquer um desses objetos fora do heap, acarretando na impossibilidade de serem alcançados através de qualquer thread (o que caracteriza sua candidatura ao GC). Portanto, após a linha 11 teremos 3 objetos elegidos. Por isso a resposta correta é “tirada de foco”.

Vulgo pegadinha. hehe

Cris_Finholdt

No livro está formatado exatamente como coloquei aqui, a numeração da linhas citadas na questao, corresponde à numeraçao do código postado aqui.

Lavieri

qual é a painga ?? eu tenho o livro e não achei esse exercicio agora O.o

mas enfim…

public class Eco { public static void main(String[] args) { Eco e1 = new Eco(); Eco e2 = new Eco(); Eco e3 = new Eco(); e3.e = e2; e1.e = e3; e2.e = e1; //antiga 10 e2 = null; //e2 == null, porem sua referncia ainda esta segura em e3.e e3 = null; //e3 == null, porem a sua referencia ainda esta segura em e1.e e1 = null; //e1 == null, toda a ilha se perde e os 3 objetos ficam elegiveis para o coletor } Eco e; }

portanto realmente nunca apenas 1 estaria elegivel, se a antiga linha 10, fosse parar entre a 7 e 8, pois o unico momento que teriamos objetos elegiveis para o coletor, seria quando os 3 de uma vez, fossem elegiveis,

pior é q eu lembro de ter feito essa questão, mas ela não ta no capitlo destinado ao coletor de lixo … o.O … q estranho

Cris_Finholdt

Nossa viajei agora!!

Obrigada Laviere!!! Entendi belezinha!

Passou batido q as referencias ainda estavam seguras! Drrr… Viajei!

Página 156 do Livro da Kathy Java5, em portugues!

Lavieri

q estrenho, tenho certeza q fiz essa questão… e olhei aki, e não acho nos exercicios do meu livro… é a versão 6.0

o.O … mas convenhamos q eu faço os exercicios da versão em ingles sempre… q estranho

Criado 18 de maio de 2009
Ultima resposta 18 de mai. de 2009
Respostas 7
Participantes 5