overview java reference

overview - java documentation



¿Alguien puede explicar la diferencia entre las referencias Fuerte, Suave, Débil y Fantasma y su uso? (3)

Esta pregunta ya tiene una respuesta aquí:

He estado tratando de entender la diferencia entre diferentes referencias, pero la teoría no provoca ninguna idea para que visualice la misma.

¿Podría alguien explicar brevemente las diferentes referencias?

Un ejemplo para cada uno lo haría mejor.


Hay una regla muy simple:

  • Los objetos fuertemente referenciados son bits estándar de código como Object a = new Object() . Los objetos a los que se hace referencia no son basura siempre que la referencia ( a , arriba) sea "accesible". Por lo tanto, cualquier cosa que no tenga una referencia fuerte alcanzable puede considerarse basura .

Entonces nos fijamos en los tipos de referencia no fuertes:

  • los objetos con referencias débiles probablemente serán recopilados por la JVM tan pronto como sean elegibles para GC (y la WeakReference eliminado). Una referencia débil a a se vería como una new WeakReference<Object>(a) . Las referencias débiles son útiles en el caso de que desee un caché en el que los datos solo sean necesarios si las claves existen de manera muy accesible en otros lugares (por ejemplo, HttpSessions)
  • los objetos con referencias suaves probablemente se quedarán en la JVM hasta que no sea necesario recuperar la memoria. Las referencias blandas son útiles para cachés donde los valores son de larga duración pero se pueden recopilar si es necesario

¡Nunca estoy muy seguro de los fantasmas!


Otro buen artículo sobre el tema:
Objetos de referencia de Java o Cómo aprendí a dejar de preocuparme y amar OutOfMemoryError , con bonitos diagramas

Extraer:

Como puede suponer, agregar tres nuevos estados opcionales al diagrama del ciclo de vida del objeto hace que sea un desastre.
Aunque la documentación indica una progresión lógica desde la que se puede acceder fácilmente a través de suave, débil y fantasma, hasta la reclamación, la progresión real depende de qué objetos de referencia crea su programa.
Si crea una WeakReference pero no crea una SoftReference , entonces un objeto avanza directamente desde lo más accesible hasta lo más difícil de llegar a lo final. ciclo de vida del objeto, con objetos de referencia

También es importante recordar que no todos los objetos se adjuntan a los objetos de referencia, de hecho, muy pocos deberían estarlo .
Un objeto de referencia es una capa de direccionamiento indirecto : recorre el objeto de referencia para alcanzar el objeto referido, y claramente no desea esa capa de direccionamiento indirecto en todo el código.
La mayoría de los programas, de hecho, usarán objetos de referencia para acceder a un número relativamente pequeño de los objetos que crea el programa.

Referencias y Referentes

Un objeto de referencia proporciona una capa de direccionamiento indirecto entre el código de su programa y algún otro objeto, denominado referente.
Cada objeto de referencia se construye alrededor de su referente y proporciona un método get () para acceder al referente. Una vez que creas una referencia, no puedes cambiar su referente. Una vez que se ha recopilado el referente, el método get () devuelve un valor nulo. Relaciones entre el código de la aplicación, la referencia suave / débil y el referente.

Aún más ejemplos: Java Programming: References ''Package

texto alt http://www.pabrantes.net/blog/space/start/2007-09-16/1/referenceTypes.png

  • Caso 1: este es el caso habitual en el que se dice que el objeto es fuertemente accesible.

  • Caso 2: Hay dos caminos hacia el objeto, por lo que se elige el más fuerte, que es el que tiene la referencia fuerte, por lo que el objeto es muy accesible.

  • Caso 3: Una vez más, hay dos rutas al Objeto, la más fuerte es la Referencia débil (ya que la otra es una Referencia fantasma), por lo que se dice que el objeto está poco accesible.

  • Caso 4: Solo hay una ruta y el enlace más débil es una referencia débil, por lo que el objeto es débilmente accesible.

  • Caso 5: Sólo una ruta y el enlace más débil es la referencia fantasma, por lo que el objeto es fácilmente accesible.

  • Caso 6: Ahora hay dos caminos y el camino más fuerte es el que tiene una referencia suave, por lo que ahora se dice que el objeto es fácilmente accesible.