Uma clássica de Garbage Collection

11 respostas
marciolx

// from www.danchisholm.net

class I {
  private String name;
  public String name() {return name;}
  public I(String s) {name = s;}
}

class J {
  public static void m1(I i) {i = null;}
  public static void main (String[] args) {
    I i = new I("X");           // 1
    m1(i);                      // 2
    System.out.print(i.name()); // 3
  }
}

Which of the following are true statements and which of the following could be a result of attempting to compile and run the program?

a. The object created a line 1 is eligible for garbage collection after line 2.
b. A NullPointerException is generated at line 3.
c. Prints X.
d. Compiler error.
e. None of the above.

11 Respostas

Daniel_Quirino_Olive

C. Passagem de parâmetros por cópia, logo o valor da instância não se altera.

marciolx

correto! eu caí nessa :oops: pela última vez :slight_smile:

Daniel_Quirino_Olive
Para os céticos, tentem este código aqui (modificado a partir da base que o marciolx passou):
class I {
  private String name;
  public String name() {return name;}
  public I(String s) {name = s;}
}

public class J {
  public static void m1(I i) {
	i = new I("A");
	System.out.println(i);
	System.out.println(i.name());
  }
  public static void main (String[] args) {
    I i = new I("X");           // 1
    m1(i);                      // 2
    System.out.println(i);
    System.out.println(i.name()); // 3
  }
}
leonardom

Vai imprimir:

I@1a16869
A
I@1cde100
X

marciolx

uma complicada de garbage collection (Dan Chisholm)

class I {
  private String name;
  public I(String s) {name = s;}
  private I other;
  public void other(I i) {other = i;}
}
class J {
  private I i1 = new I("A");
  private I i2 = new I("B");
  private I i3 = new I("C");
  private void m1() {
    i1.other(i2);
    i2.other(i1);
    i3.other(i3);
    i1 = i3;
    i2 = i3;
    m2();
  }
  private void m2() {
    // Do amazing things.
  }
  public static void main (String[] args) {
    new J().m1();
  }
}

Which of the three objects, A, B, C, are eligible for garbage collection when method m2 begins to execute?
a. A
b. B
c. C
d. None.
e. Compiler error.
f. Run time error.
g. None of the above.

A

Estou em dúvida…
Primeiro achei que nenhum deles…
Agora acho que A e B estão elegíveis para serem coletados porque não há referências para eles somente um para o outro.

C

Também acho que A e B estão elegíveis para serem coletados.
Apesar de se referenciarem um ao outro eles estão inalcançaveis por qualquer bloco de código(salvo o método finnalize(), se for implementado )

Acho que é isso. Acho que este esquema deve estar certo…Paulo Silveira ?

Adilson

marciolx

ambos acertaram, objetos que se referenciam formam uma “ilha de objetos” passíveis de serem coletados.

gostei do diagrama :o

P

hehe, eu tb caí nessa. To ficando distreinado…

S

eu tb caí bunito… ai ai :stuck_out_tongue:
e to com a prova marcada pra dia 14 de novembro.
vou ter q bitolar esse fds :smiley:

marciolx

“Solum”:
eu tb caí bunito… ai ai :stuck_out_tongue:
e to com a prova marcada pra dia 14 de novembro.
vou ter q bitolar esse fds :D

olá, por que você marcou pra esse dia, ou seja, daqui a 1 mês e meio? tem que marcar com tanta antecedência?

Criado 16 de setembro de 2003
Ultima resposta 27 de set. de 2003
Respostas 11
Participantes 7