Otro buen artículo sobre el tema:
Java Reference Objects or How I Learned to Stop Worrying and Love OutOfMemoryError, con bonitas diagramas
Extracto:
Como puede imaginar, agregando tres nuevos estados opcionales a th El diagrama del ciclo de vida del objeto es un desastre.
Aunque la documentación indica una progresión lógica de fuertemente accesible a través de soft, weak y phantom, para recuperarse, la progresión real depende de qué objetos de referencia crea su programa.
Si crea un WeakReference
pero no crea un SoftReference
, entonces un objeto progresa directamente de fuertemente accesible a débilmente alcanzable a finalizado a recopilado. objeto del ciclo de vida, con objetos de referencia
También es importante recordar que no se adjuntan todos los objetos para hacer referencia a objetos - de hecho, muy pocos de ellos debe ser.
Un objeto de referencia es una capa de direccionamiento indirecto: se pasa por el objeto de referencia para llegar al objeto referido, y claramente no se 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 indirección entre su código de programa y algún otro objeto, llamado el referente.
Cada objeto de referencia se construye alrededor de su referente, y proporciona un método get() para acceder al referente. Una vez que crea una referencia, no puede cambiar su referente. Una vez que se ha recopilado el referente, el método get() devuelve null. las relaciones entre el código de aplicación, la referencia suave/débil, y referente
ejemplos aún más: Java Programming: References' Package
alt text http://www.pabrantes.net/blog/space/start/2007-09-16/1/referenceTypes.png
Caso 1: Este es el habitual caso donde se dice que Object es fuertemente accesible.
Caso 2: Hay dos rutas a Objeto, por lo que se elige la más fuerte, que es la que tiene la referencia fuerte por lo tanto, el objeto es muy accesible.
Caso 3: Una vez más hay dos rutas hacia el 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 es débilmente alcanzable.
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: Solo una ruta y el eslabón más débil es la referencia fantasma, por lo tanto, el objeto es prácticamente alcanzable.
Caso 6: ahora hay dos rutas y la ruta más fuerte es la que tiene una referencia suave, por lo que ahora se dice que el objeto es accesible suavemente.
Relacionado pero más estrecho en el alcance: http://stackoverflow.com/questions/299659/what-is-the-difference-between-a-soft-reference-and-a-weak-reference-in-java –