Dúvida questão GC

4 respostas
diegobrandao
5. class Rubbish {
 6.   Rubbish r;
 7.   public static void main(String [] args) {
 8.     Rubbish r1 = new Rubbish();
 9.     Rubbish r2 = new Rubbish();
10.     Rubbish r3 = new Rubbish();
11.     r1.r = r2;  r2.r = r3;  r3.r = r1;
12.     r3 = null;
13.     r2 = null;
14.     r1 = null;    
15.     // do stuff
16.   }
17. }

/*
Location:   ... > Section 7: Fundamentals > Objective 7.4 > Question 65
Given:
After which line does the first object become eligible for garbage collection?

A 	after line 11
B 	after line 12
C 	after line 13
D 	after line 14
E 	Compilation fails.

Option D is correct. NOT until line 14 are any objects inaccessible from a live thread.

*/

Eu não consegui entender o fluxo do programa… Eu pensei que após a linha 13 é que tenho o primeiro objeto elegível para o GC.
Se alguém puder ajudar…

Desde já Agradeço…

4 Respostas

filipefox

Acho que é isso aqui:

Não importa se vc anulou r3 e r2, conforme a execução, e pra VM, todos dependem do valor de r1.

r1.r = r2;

r2.r = r3;

r3.r = r1; //  ANULANDO AQUI, O R1, VC ELEGE PRA GC, POIS AS VARIAVEIS ACIMA DEPENDEM DE R1

Sei lá se consegui me expressar bem…eu entendi isso pelo menos :stuck_out_tongue:

Espero ter ajudado de alguma forma, se errei na explicação…me desculpe.

Amanweb

Esta mesma pergunta está neste tópico do JavaRanch:
http://saloon.javaranch.com/cgi-bin/ubb/ultimatebb.cgi?ubb=get_topic&f=24&t=032985

Basicamente temos a seguinte referência circular: r1->r2->r3->r1
Isso significa que as três variáveis estão juntas (Islands of Isolated Objects (IIO)) e só estarâo elegíveis pelo GC quando todas forem null.

[]s

filipefox

Não falei besteira, ainda bem :lol:

diegobrandao

Obrigado a todos pela ajuda…
Vou estudar melhor o assunto…

Criado 14 de outubro de 2008
Ultima resposta 15 de out. de 2008
Respostas 4
Participantes 3