É justamente oq eu faço pra ver quantos objetos existem e tals
Mais após a chamada
a2 = null
Nós já não temos 1 objeto elegível para a GC
Eu entendo elegível como o objeto pode ser removido da memória pelo GC, não estou certo?
E na resposta fala que em nenhum momento há apenas um objeto elegível para o GC
Agora só se elegível é quando há apenas 1 objeto que NÃO pode ser removido da memório pelo GC
Ae sim da certo
Porque temos um hora que temos 2 objetos que não pode ser removido e na proxima atribuição não temos mais nenhum, porque os 3 já vão estar prontos para serem removidos da memória
evertonsilvagomesjav
brunorota:
Então
É justamente oq eu faço pra ver quantos objetos existem e tals
Mais após a chamada
a2 = null
Nós já não temos 1 objeto elegível para a GC
Eu entendo elegível como o objeto pode ser removido da memória pelo GC, não estou certo?
E na resposta fala que em nenhum momento há apenas um objeto elegível para o GC
Agora só se elegível é quando há apenas 1 objeto que NÃO pode ser removido da memório pelo GC
Ae sim da certo
Porque temos um hora que temos 2 objetos que não pode ser removido e na proxima atribuição não temos mais nenhum, porque os 3 já vão estar prontos para serem removidos da memória
Quando a2 = null, vc tem um objeto elegivel para o GC sim.
brunorota
Ops quer dizer nós já temos apenas 1 objeto elegível para o GC
E a resposta correta é que nesse código NUNCA teremos APENAS 1 objeto elegível para o GC
Sera q foi um erro do MasterExam?
evertonsilvagomesjav
brunorota:
Ops quer dizer nós já temos apenas 1 objeto elegível para o GC
E a resposta correta é que nesse código NUNCA teremos APENAS 1 objeto elegível para o GC
Sera q foi um erro do MasterExam?
Exatamento. Na linha que a2 = null, existe apenas o objeto a2 elegivel para a coleta. Pq quando a3 recebeu null á variavel “a” fica em uma ilha de isolamento e nao pode mais ser acessada portanto á unica referencia do objeto referenciado por a2 é o proprio a2, e quando a2 = null nao existe mais referencia nenhuma para este objeto.
jayrmotta
oO
evertonsilvagomesjav
jayrmotta:
brunorota,
boa tarde … ao meu ver e desculpa minha ignorância caso não seja mas a resposta que atende a sua pergunta é após a3 = null; ser executado, pois ele pergunta: Até que ponto há SOMENTE um objeto elegível para o GC?
neste ponto o a3 referenciava o objeto de a2 portanto somente ele está elegível ao garbage collector os demais se tornarão elegíveis nas linhas que seguem, porém a pergunta pede o ponto onde a SOMENTE UM e este momento é após a3 = null; executar, alguém concorda?
Abraços!
Não vc ta errado. Quando a3 = null o objeto a1.a ainda faz referencia ao mesmo objeto de a3 e o objeto a3.a que referenciava a2 ainda é referenciado por a2.
caio_ferreira
kra, nunca vamos ter 1 objeto só elegivel para a GC
à questão é o objeto a2, quando a2 = null ninguem mais referencia o mesmo objeto que ele.
caio_ferreira
putz kra, to fazendo confusão, ta certo, quando a2 == null, não existe mais nenhuma referência a esse objeto. Nesse ponto, existe apenas um objeto qualificado para o Garbage Collector
evertonsilvagomesjav
Isso ai!
brunorota
Afinal a questão está errada ou não? o0 iahuihauhauih
G
gervas-IO
Olá amigos, me confundi um pouco, só pra confirmar:
depois da execução da linha:
a2 = null;
ainda não há nenhum objeto elegível para Garbage Collector. Correto?
O objeto referente a a3 faz referência a a2 , a3 ainda está presente em a1 (então a1, contém a3 que contém a2)<= rs, certo!?
Coloquei o finalize no código abaixo, acho que assim é possível visualizar melhor:
publicclassAnimal{publicAnimala;publicStringname;publicstaticvoidmain(Stringargs[]){Animala1=newAnimal();Animala2=newAnimal();Animala3=newAnimal();a1.name="a1";a2.name="a2";a3.name="a3";a3.a=a2;a1.a=a3;a2.a=a1;a3=null;a2=null;//a1 = null; <= com essa linha comentada ainda não há nenhum objeto elegívelSystem.gc();}publicvoidfinalize(){System.out.println(name);}}
Abs.
Paulo Gervasio.
brunorota
Putz vdd hehehe
Não tinha reparado nisso =/
Esse exame ainda me mata iuhaiuhau
Já tirei a minha dúvida sobre essa pergunta =)
Obrigado Paulo e a todos que dedicaram um pouco de seu tempo para o tópico
Valeww até+
evertonsilvagomesjav
gervas-IO:
Olá amigos, me confundi um pouco, só pra confirmar:
depois da execução da linha:
a2 = null;
ainda não há nenhum objeto elegível para Garbage Collector. Correto?
O objeto referente a a3 faz referência a a2 , a3 ainda está presente em a1 (então a1, contém a3 que contém a2)<= rs, certo!?
Coloquei o finalize no código abaixo, acho que assim é possível visualizar melhor:
publicclassAnimal{publicAnimala;publicStringname;publicstaticvoidmain(Stringargs[]){Animala1=newAnimal();Animala2=newAnimal();Animala3=newAnimal();a1.name="a1";a2.name="a2";a3.name="a3";a3.a=a2;a1.a=a3;a2.a=a1;a3=null;a2=null;//a1 = null; <= com essa linha comentada ainda não há nenhum objeto elegívelSystem.gc();}publicvoidfinalize(){System.out.println(name);}}
Abs.
Paulo Gervasio.
Cara como nao tem nenhum objeto sendo que a3.a estava referenciando o mesmo objeto que a2, e a3 recebendo null á variavel “a” de a3 fica em uma ilha de isolamento e nao pode ser mais acessado por tanto quando a2 recebe null o objeto fica elegivel para a coleta sim. Pra mim o exercicio ta errado.
G
gervas-IO
Opa, blz?
Nessa classe Animal que eu alterei, se você for até a linha 22, poderá fazer o seguinte:
System.out.println(a1.a.a.name);//a1 = null; <= com essa linha comentada ainda não há nenhum objeto elegível
E ele te retornará a2.
Ou seja a1 ainda tem uma referencia a a2.
Talvez você esteja confundindo o objeto em si com a referência ao objeto…
Quando digo a1,a2 ou a3 estou fazendo referência ao Objeto e deveria estar falando em algo do tipo (Animal@3e25a5, Animal@19821f e Animal@3e25a5)
Abs.
Paulo Gervasio.
evertonsilvagomesjav
Opa, blz?
Nessa classe Animal que eu alterei, se você for até a linha 22, poderá fazer o seguinte:
System.out.println(a1.a.a.name);//a1 = null; <= com essa linha comentada ainda não há nenhum objeto elegível
E ele te retornará a2.
Ou seja a1 ainda tem uma referencia a a2.
Talvez você esteja confundindo o objeto em si com a referência ao objeto…
Quando digo a1,a2 ou a3 estou fazendo referência ao Objeto e deveria estar falando em algo do tipo (Animal@3e25a5, Animal@19821f e Animal@3e25a5)