[code]
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;
}
}[/code]
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 ?
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.
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 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 ?
[quote=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.
[/quote]
Ah entendi, é isso mesmo
vlw ae.