Clase de referencia débil en Java

Sheeraz Gul 12 octubre 2023
Clase de referencia débil en Java

Una referencia débil es una referencia que no es lo suficientemente fuerte para hacer que un objeto permanezca en la memoria. Este tutorial demuestra el uso de referencias débiles en Java.

Clase de referencia débil en Java

En Java, la clase java.lang.ref.WeakReference aprovecha los recolectores de basura para determinar la accesibilidad, por lo que no necesitamos hacerlo nosotros mismos. La clase de referencia débil en Java tiene los siguientes métodos.

Método Descripción
get() Este método devuelve el referente del objeto de referencia.
clear() Este método se utiliza para borrar el objeto de referencia.
enqueue() Este método se usa para agregar el objeto de referencia a la cola; el objeto debe registrarse en la cola.
isEnqueued() Este método indica si el objeto de referencia se ha puesto en cola; puede ser por el recolector de basura o por el propio programa.

Primero, probemos un ejemplo simple para implementar la clase de referencia débil de Java.

package delftstack;

import java.lang.ref.WeakReference;
public class Weak_Reference {
  public static void main(String[] args) {
    // creating a strong object
    Demo_Class Strong_Object = new Demo_Class();

    // creating a weak reference of demo_class
    WeakReference<Demo_Class> Weak_Object = new WeakReference<>(Strong_Object);
    System.out.println("Call the show info function using  the strong object");
    Strong_Object.Show_Info();

    System.out.println("Setting the object to null");
    Strong_Object = null;
    Strong_Object = Weak_Object.get();

    System.out.println("Call the show info function using  the weak object");
    Strong_Object.Show_Info();
  }
}
class Demo_Class {
  void Show_Info() {
    System.out.println(">>This is the info from demo class<<");
  }
}

El código anterior crea un objeto fuerte de Demo_Class y un objeto débil de la misma clase y llama a la función Show_Info. Ver salida:

Call the show info function using  the strong object
>>This is the info from demo class<<
Setting the object to null
Call the show info function using  the weak object
>>This is the info from demo class<<

Ahora probemos un ejemplo con los métodos anteriores.

package delftstack;

import java.lang.ref.WeakReference;
public class Weak_Reference {
  public static void main(String[] args) {
    Demo_Class Strong_Object = new Demo_Class();
    WeakReference<Demo_Class> Weak_Object = new WeakReference<Demo_Class>(Strong_Object);

    System.out.println("Retrieve object from weak reference using get()");
    Weak_Object.get().Show_Info();

    System.out.println("queue object using enqueue()");
    System.out.println(Weak_Object.enqueue());

    System.out.println("Check if reference is queued using isEnqueued()");
    System.out.println(Weak_Object.isEnqueued());
  }
}
class Demo_Class {
  void Show_Info() {
    System.out.println("Show_Info() from Demo_Class is called.");
  }
}

El código anterior utiliza todos los métodos descritos anteriormente en el objeto débil de Demo_Class. Ver salida:

Retrieve object from weak reference using get()
Show_Info() from Demo_Class is called.
queue object using enqueue()
false
Check if reference is queued using isEnqueued()
false
Sheeraz Gul avatar Sheeraz Gul avatar

Sheeraz is a Doctorate fellow in Computer Science at Northwestern Polytechnical University, Xian, China. He has 7 years of Software Development experience in AI, Web, Database, and Desktop technologies. He writes tutorials in Java, PHP, Python, GoLang, R, etc., to help beginners learn the field of Computer Science.

LinkedIn Facebook