Duvida de u h: Sobre Garbage Collector no exame

10 respostas
duardor

Ae… Eu li alguns livros para essa prova e seguinte: tem alguns q tem altas coisas sbre garbage collector tipo agoritmo mark sweeper phantom e weak references etc…
Eu to sabendo o q eh, mas queria saber de vcs se alguem jha viu alguma questao sobre o assunto…

10 Respostas

Bani

Não cai na prova sobre os algoritmos usados, pois eles não estão especificados pelo Java (ou seja, cada JVM faz do jeito que preferir).
O tipo de questão que cai sobre garbage collector é darem um código e perguntarem quantos objetos estão aptos a serem coletados, ou a partir de qual linha do código o objeto x poderia ser coletado, e nesses caso você precisa entender sobre as referências

Rafael_Steil

Sobre os tipos de referencias ( phanton, weak, strong ) nao cai, pois isso eh um topico bem mais avancado ja.
Porem, cai questoes que perguntam quando ( e SE ) um objeto vai poder ser coletado, ou quantas referencias existem para tal objeto.

Em relacao a perguntas de qual algoritmo eh usado, a resposta mais comum eh “nap eh possivel saber”, pois cada VM pode implementar da maneira que achar melhor.

Rafael

F

Opa,

Vcs poderiam dar um exemplo de uma questão deste tipo ?

Obrigado

marciolx

After what line will the object referenced by i become eligible for garbage collection in the following code?

public class Pannel{ public static void main(String argv[]){ Pannel p = new Pannel(); p.go(); } public void go(){ Integer i = new Integer(10); Integer i2 = i; i = null; Integer i3 = new Integer(0); i2= null; } }

  1. i = null;
  2. Integer i3 = new Integer(0);
  3. i2= null;
  4. It will not become eligable for garbage collection during the run of this program
F

Obrigado pelo exemplo.

Não estudei muito Garbage ainda, mas acredito que a resposta seja o item 3. Pois após i2 = null o método termina, aí acho que o Garbage entra em ação p/ limpar as variáveis que foram alocadas no método.
Se estiver errado peço que me corrijam ok ?

valeu !!!

marciolx

parabéns, você acertou :smiley:

marciolx

:? tome cuidado ao afirmar que o gc entra em ação quando o método termina, primeiro porque é impossível afirmar com certeza que isso vai ocorrer, segundo, porque podem haver ainda referências para o objeto mesmo quando o método termina, por exemplo, se o retorno do método for uma referência para o objeto.

smota

entrando na conversa … pelo que eu entendi a resposta seria mesmo a opção 3 mas a explicação deveria ser
"i2 referencia o mesmo local que i, por isso, mesmo i sendo setado para null sua área de memória só poderá ser liberada pelo gc após o objeto i2 ser destruido" … não é isso?

Caso não existisse a linha Integer i2 = i; então a resposta seria a opção 1, o objeto é marcado para ser coletado pelo GC quando
o bloco que instanciou o objeto termina (uma loop, if, ou o método propriamente) ou a referência do objeto é destruida (objeto=null) …

é por ai?

[]s

marciolx

é isso :slight_smile:

T

Disse tudo…é exatamente isso! Mesmo que o método acabe, pode ser que ainda exista alguma referência ao objeto criado! Fora isso…existem diversos algoritmos de gc e não podemos prever qual deles foi implementado e em que momento o gc é executado!

[]'s Tjmm.

Criado 30 de março de 2003
Ultima resposta 17 de abr. de 2003
Respostas 10
Participantes 7