Clase java.lang.ref.SoftReference en Java

Cuando creamos un objeto en Java, un objeto no es suave por defecto. Para crear un objeto de referencia suave, debemos especificarlo explícitamente en la JVM . En la referencia suave, incluso si el objeto está libre para la recolección de basura, entonces tampoco se recolecta la basura hasta que JVM necesita memoria. Los objetos se borran de la memoria cuando JVM se queda sin memoria.

¿Por qué se utilizan objetos de referencia suave?

Cuando se crea un objeto de referencia suave, se marca para la recolección de elementos no utilizados. Sin embargo, no se recolecta basura hasta que ya menos que haya una deficiencia de memoria en la JVM.

java.lang.ref.SoftReference Class in Java

Constructores en la clase SoftReference:

Parámetros del constructor

Descripción del constructor

SoftReference (referente T) Crea una nueva referencia suave que se refiere al objeto dado.
SoftReference ( T referente, ReferenceQueue <T> q) Crea una nueva referencia suave que se refiere al objeto dado y se registra con la cola dada.

método get():

Java

// Java program to show the demonstration
// of get() method of SoftReference Class
 
import java.lang.ref.SoftReference;
class GFG {
    public static void main (String[] args) {
       
        // creating a strong object of MyClass
          MyClass obj = new MyClass ();
       
          // creating a weak reference of type MyClass
          SoftReference<MyClass> sobj = new SoftReference<>(obj);
       
          System.out.println ("-> Calling Display Function using strong object:");
          obj.Display ();   
       
          System.out.println ("-> Object set to null");
       
          obj = null;
       
        // Calling the get() method
          obj = sobj.get();
          System.out.println ("-> Calling Display Function after retrieving from soft Object");
          obj.Display ();
    }
}
class MyClass {
      void Display ()
    {
        System.out.println ("Display Function invoked ...");
    }
}
Producción

-> Calling Display Function using strong object:
Display Function invoked ...
-> Object set to null
-> Calling Display Function after retrieving from soft Object
Display Function invoked ...

Ejemplo que muestra el método enqueue() y isEnqueued() de la clase SoftReference:

Java

// Java program demonstrating all the methods
// of SoftRefernce Class
 
import java.lang.ref.SoftReference;
class GFG {
    public static void main (String [] args) {
      
        // Creating object of Class X
        X obj = new X ();
       
        // Creating a soft reference of type X
          SoftReference <X> softobj = new SoftReference <X> (obj);
       
          System.out.println ("-> Retrieving object from Soft Reference using get ()");
          softobj.get().show();
       
          System.out.println ("-> Is it possible to queue object using enqueue ()");
          System.out.println (softobj.enqueue ());
       
          System.out.println ("-> Checking if reference is queued using isEnqueued ()");
          System.out.println (softobj.isEnqueued ());
    }
}
class X {
    void show()
    {
        System.out.println ("show () from X invoked..");
    }
}
Producción

-> Retrieving object from Soft Reference using get()
show() from X invoked..
-> Is it possible to queue object using enqueue()
false
-> Checking if reference is queued using isEnqueued()
false

Métodos heredados de la clase de referencia: 

Nombre del método

Descripción del método

clear() Borra este objeto de referencia.
poner en cola() Agrega este objeto de referencia a la cola con la que está registrado, si corresponde.
obtener() Devuelve el referente de este objeto de referencia.
está en cola() Indica si este objeto de referencia ha sido puesto en cola, ya sea por el programa o por el recolector de elementos no utilizados.

Publicación traducida automáticamente

Artículo escrito por varunkedia y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *