Buscar..


Diferentes tipos de referencia

java.lang.ref paquete java.lang.ref proporciona clases de objetos de referencia, que admiten un grado limitado de interacción con el recolector de basura.

Java tiene cuatro tipos principales de referencia diferentes. Son:

  • Fuerte referencia
  • Referencia débil
  • Referencia suave
  • Referencia fantasma

1. fuerte referencia

Esta es la forma habitual de crear objetos.

MyObject myObject = new MyObject();

El titular de la variable mantiene una fuerte referencia al objeto creado. Mientras esta variable esté MyObject y mantenga este valor, el recolector de basura no recopilará la instancia de MyObject .

2. Referencia débil

Cuando no desea mantener un objeto por más tiempo y necesita borrar / liberar la memoria asignada para un objeto tan pronto como sea posible, esta es la manera de hacerlo.

WeakReference myObjectRef = new WeakReference(MyObject);

Simplemente, una referencia débil es una referencia que no es lo suficientemente fuerte como para obligar a un objeto a permanecer en la memoria. Las referencias débiles le permiten aprovechar la capacidad del recolector de basura para determinar la accesibilidad para usted, por lo que no tiene que hacerlo usted mismo.

Cuando necesite el objeto que creó, simplemente use el método .get() :

myObjectRef.get();

El siguiente código ejemplificará esto:

WeakReference myObjectRef = new WeakReference(MyObject);
System.out.println(myObjectRef.get()); // This will print the object reference address
System.gc();
System.out.println(myObjectRef.get()); // This will print 'null' if the GC cleaned up the object

3. Referencia suave

Las referencias blandas son ligeramente más fuertes que las débiles. Puede crear un objeto de referencia suave de la siguiente manera:

SoftReference myObjectRef = new SoftReference(MyObject);

Pueden aferrarse a la memoria con más fuerza que la referencia débil. Si tiene suficientes recursos / recursos de memoria, el recolector de basura no limpiará las referencias blandas con tanto entusiasmo como las referencias débiles.

Las referencias blandas son útiles para usar en el almacenamiento en caché. Puede crear objetos de referencia suave como un caché, donde se guardarán hasta que se agote la memoria. Cuando su memoria no puede proporcionar suficientes recursos, el recolector de basura eliminará las referencias blandas.

SoftReference myObjectRef = new SoftReference(MyObject);
System.out.println(myObjectRef.get()); // This will print the reference address of the Object
System.gc();
System.out.println(myObjectRef.get()); // This may or may not print the reference address of the Object

4. Referencia fantasma

Este es el tipo de referencia más débil. Si creó una referencia de objeto utilizando la Referencia fantasma, el método get() siempre devolverá nulo.

El uso de esta referencia es que "los objetos de referencia fantasma, que se ponen en cola después de que el recopilador determina que sus referentes pueden ser reclamados. Las referencias fantasma se usan más a menudo para programar acciones de limpieza premente de una manera más flexible que la posible Mecanismo de finalización de Java ". - De Phantom Reference Javadoc de Oracle.

Puede crear un objeto de referencia fantasma de la siguiente manera:

PhantomReference myObjectRef = new PhantomReference(MyObject);


Modified text is an extract of the original Stack Overflow Documentation
Licenciado bajo CC BY-SA 3.0
No afiliado a Stack Overflow