Quantos objetos serão elegíveis para o Garbage Collector na linha 12??
class A{
A a;
public A(A a){
this.a=a;
}
public static void main(String args[]){
A a1=null;
A a2=new A(new A(null));
A a3=new A(a2);
a1=a3;
a1.a=new A(null);
a2.a=null; //Line12
System.gc();
}
}
Eu respondi “mais de 3”, pq contei todos os “Objeto.a” que receberam valor null mas a resposta certa é “1”.
Não entendi!!
As variáveis de referência que receberam null na construção dos objetos não ficarão elegíveis, porque ??
Então, único objeto que será elegivel é “a2.a”???
tambem to com essa duvida nas minhas contas foram 2.
Anderson_Schmidt
Concordo com a resposta do livro, 1 é correto mesmo.
Quais as referências não nulas, tirando “a2.a=null;” ??
B
brrodo
O único objeto elegiado ao GC é o que está referenciado por “a2.a”. Após essas duas linhas aqui:
1. class A{
A a;
public A(A a){
this.a=a;
}
public static void main(String args[]){
A a1=null;
A a2=new A(new A(null));
A a3=new A(a2);
a1=a3;
a1.a=new A(null); //aqui "a1.a" modifica a variável "a3.a", q perde a referencia ao objeto "a2"
a2.a=null; //Line12 //aqui, faz a variavel "a2.a" perder a referencia ao seu objeto, portanto o objeto de "a2.a" será elegido, mas não o de "a2", q ainda tem referencia.
System.gc();
}
}
Você não pode considerar dessa maneira, pois quando passa “null”, vc está atribuindo este valor a uma variável “a” que não faz referência a nenhum objeto, ou seja, elas ainda não foram inicializadas. Não há perda de referência de nenhum objeto ao passar “null” a essas variáveis antes de ser atribuído um valor a elas.
Espero q tenha ficado claro.
Lavieri
vamo la davagarinho...
//linha 7 ---> A a1=null;a1=nulllistaParaColetaDeLixo={}
//linha 12 ---> a2.a=null;a1=obj3a2=obj1a3=obj3obj1.a=null//<== alteraçãoobj3.a=obj4obj4.a=nulllistaParaColetaDeLixo={obj2}//obj1.a perdeu a referencia a obj2
Portanto... na linha 12... ninguem mais referencia o objeto 2 ... e só ele esta elegivel para a coleta
e como vc pode ver... a1 e a3 referencia obj3 ... a2 referencia obj1 ... obj3.a referencia obj4 .... portanto obj1,obj3 e obj4 não são elegiveis para a coleta
S
Slaydy
Acho que eu estava pensando ao contrario, distorcendo o conceito! eu não tenho que contar quantas variaveis de referencia ficaram nulas e sim quantos objetos existem e não estão sendo referenciados por ninguem!!
Agora ficou mais claro!
Ah, adorei esse passo a passo, é um teste de mesa mais descritivo, oq eu fiz só estava me confundindo mais.rs vai me ajudar a resolver esse tipo de questão no meu exame (28/05 …ta chegando :shock: )
Agora entendi, muito obrigada a todos!
deyvid
É verdade! a resposta é a2.a. Não responder porque a questão já foi respondida pelos nossos colegas. Muito boa essa questão