Foro de elhacker.net

Programación => Java => Mensaje iniciado por: Carlosjava en 26 Julio 2015, 12:52 pm



Título: Dudas sobre GC
Publicado por: Carlosjava en 26 Julio 2015, 12:52 pm
Which is the earliest line in the following code after which the object created on the //1 can be garbage collected, assuming no compiler optimizations are done?


Código
  1. public class NewClass
  2. {
  3.   static String enterTheDragon()
  4.   {
  5.      String a = new String("hello");
  6.      String b = new String("world !");  // 1
  7.      String c = new String(a + b + ""); // 2
  8.      String d = b;  // 3
  9.      b = a; // 4
  10.      d = a; // 5
  11.      return c;  // 6
  12.   }
  13.   public static void main(String args[])
  14.   {
  15.      String s = enterTheDragon(); // 7
  16.      System.out.println(s);       // 8
  17.   }
  18. }

la respuesta es la linea 5 pero no entiendo porque, necesitaria q alguien me lo explicara q es exactamente lo q hace el garbage collector, gracias

Mod: Los códigos deben ir en GeSHi


Título: Re: Re: Dudas sobre GC
Publicado por: Usuario Invitado en 26 Julio 2015, 17:22 pm
1. String 'b' es creado.
2. String 'c' es creado.
3. String 'd' referencia a 'b'.
4. String b referecia a 'a'.
5. String d referencia a 'a'.

¿En la línea 5 quién referencia al objeto b?

Nadie. Es por esto que en la línea 5 el objeto b es candidato a recolección. Una variable u objeto es candidato a recolección cuando ningún otra variable u objeto hace referencia a él. Por lo tanto, cuando d deja de apuntar a b, automáticamente b se vuelve candidato para recolección.