¿En qué se diferencian los distintos tipos de referencias en el lenguaje Java y cómo afectan a la recolección de basura?
sobes.tech AI
Respuesta de la IA
En Java, existen diferentes tipos de referencias que afectan el comportamiento del recolector de basura:
-
Referencia Fuerte (Strong Reference) — una referencia normal a un objeto. Mientras existan referencias fuertes, el objeto no será eliminado por el recolector de basura.
-
Referencia Suave (Soft Reference) — un objeto con referencia suave se elimina solo cuando hay escasez de memoria. Se usa para almacenamiento en caché.
-
Referencia Débil (Weak Reference) — un objeto con referencia débil puede ser eliminado en la siguiente pasada del recolector de basura, incluso si hay referencias débiles.
-
Referencia Fantasma (Phantom Reference) — se usa para rastrear el momento en que un objeto está listo para ser eliminado, pero aún no ha sido eliminado. Permite realizar acciones adicionales después de la eliminación del objeto.
Ejemplo de uso de referencia débil:
import java.lang.ref.WeakReference;
public class WeakRefExample {
public static void main(String[] args) {
Object obj = new Object();
WeakReference<Object> weakRef = new WeakReference<>(obj);
obj = null; // Eliminamos la referencia fuerte
System.gc(); // Ejecutamos el recolector de basura
if (weakRef.get() == null) {
System.out.println("Objeto eliminado");
} else {
System.out.println("El objeto aún está disponible");
}
}
}
De esta forma, el tipo de referencia elegido permite controlar el tiempo de vida de los objetos y la eficiencia en el uso de memoria.