Una referencia fantasma es un tipo de referencia en Java , donde se puede recuperar la memoria. La referencia fantasma es una de las fortalezas o niveles de referencia 'no fuerte ' definidos en el lenguaje de programación Java; los otros son débil y suave . [1] La referencia fantasma es el nivel más débil de referencia en Java; en orden de más fuerte a más débil, son: fuerte, suave, débil, fantasma.
Se hace referencia fantasmal a un objeto después de que se haya finalizado .
En Java 8 y versiones anteriores, es necesario borrar la referencia antes de poder recuperar la memoria de un referente finalizado. Un cambio en Java 9 [2] permitirá que la memoria de un referente finalizado se pueda recuperar inmediatamente.
Las referencias fantasma tienen un uso limitado, principalmente usos técnicos estrechos. [3] En primer lugar, se pueden utilizar en lugar de un finalize
método, lo que garantiza que el objeto no se resucite durante la finalización. Esto permite que el objeto se recolecte como basura en un solo ciclo, en lugar de tener que esperar un segundo ciclo de recolección de basura para garantizar que no se haya resucitado. Un segundo uso es detectar exactamente cuándo se ha eliminado un objeto de la memoria (usándolo en combinación con un ReferenceQueue
objeto), lo que garantiza que su memoria esté disponible, por ejemplo, aplazando la asignación de una gran cantidad de memoria (por ejemplo, una imagen grande) hasta que se libere la memoria anterior.