Recolección de basura de objetos referenciados en Java

Tengo el siguiente código:

class Test {
   public static void main(String[] args) {
      String a,b,c;
      a = new String(args[0]);
      b = a;
      a = null;
      b = null;
   }
}

¿Alguien puede decirme cuándo será elegible para la recolección de basura? Creo que es después de que b se haga nulo porque a y b no hacen referencia al mismo objeto.

Respuesta 1

Lanzando mi respuesta también. Como dicen las otras respuestas, la Cadena / objeto está disponible para la Recolección de basura una vez que ya no es accesible (ya no tiene un identificador).

Entonces, si tenía una lista vinculada en una dirección ... [1] -> [2] -> [3]y tenía un identificador para [1](que tiene un identificador hacia [2]adelante). Si establece su manejador en [1]nulo, pondría toda la lista disponible para el recolector de basura. Como dice esta respuesta, puede llamar a System.gc () para solicitar la ejecución del recolector de basura, pero no se garantiza que lo haga.

Creo que el enfoque principal de esta respuesta es que los objetos están disponibles para el recolector de basura cuando son inaccesibles y eso no significa necesariamente que no haya referencias a él. En mi ejemplo anterior, aunque [1]tenía un identificador [2], [2]estaba disponible para el recolector de basura porque no tenía identificador [1].

Respuesta: 2

El objeto que ha creado new String(args[0]);será elegible para la colección una vez que ya no haya referencias a él. Así que veamos el código:

a = new String(args[0]);

a apunta a su cadena, no es elegible para la colección.

b = a;

ay bseñale su Cadena, no elegible.

a = null;

b apunta a su cadena, no elegible.

b = null;

Sin referencias a su cadena, ¡el recolector de basura está feliz!

Respuesta: 3

Debe razonar en términos de objetos asignados: Stringnadie le hace referencia a lo que asignó tan pronto como anule ambos ay b. A partir de ahí, el recolector de basura tiene derecho a hacer su trabajo.

Respuesta: 4

El primero es enum class enum coffeeSize {BIG (8), HUGE (10), OVERWHELMING (16); int onzas privadas; coffeeSize (int onzas) {this.ounces = onzas; } public int ...

Tenemos una combinación de Java y C ++ en el código de software. Entonces llamamos a la biblioteca C ++ baiscally .dll y .so desde JAVA usando JNI. En solaris esto funciona bien. Podemos cargar .so y llamar a la función C ++ ...

este es mi código surefire-plugin pom.xml <build> <plugins> <plugin> <groupId> org.apache.maven.plugins </groupId> <artifactId> maven -...

Tengo un escritor de elementos como se muestra a continuación: <beans: nombre de propiedad = "lineAggregator"> <beans: bean class = "org.springframework.batch.item.file.transform.FormatterLineAggregator"> <beans: ...