Sobes.tech
Junior — Middle

¿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:

  1. Referencia Fuerte (Strong Reference) — una referencia normal a un objeto. Mientras existan referencias fuertes, el objeto no será eliminado por el recolector de basura.

  2. Referencia Suave (Soft Reference) — un objeto con referencia suave se elimina solo cuando hay escasez de memoria. Se usa para almacenamiento en caché.

  3. 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.

  4. 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.