¿Qué son las referencias fuertes, las referencias suaves, las referencias débiles y las referencias fantasma en Java?

Reimpreso aquí

Antes de jdk1.2, había dos tipos de citas, "ya citado" y "no citado". Sin embargo, algunos fenómenos no se pueden describir en determinadas circunstancias específicas. Por ejemplo, algunos objetos deben descartarse cuando la memoria es escasa.
Entonces, después de jdk1.2, las referencias se dividen en cuatro tipos: referencias fuertes, referencias suaves, referencias débiles y referencias fantasmas.
Aquí están los cuatro tipos de referencias:

Citación fuerte

Cita fuerte: en la mayoría de los casos que usamos, es una cita fuerte.
Por ejemplo, Object o = new Object (); mientras o todavía apunte al objeto objeto, el objeto objeto no se reciclará; mientras exista la referencia fuerte, entonces el objeto apuntado por esta referencia no será reciclado . Incluso si la memoria es insuficiente, jvm solo lanzará una excepción. Esta referencia no se reciclará. Solo si asignamos nulo manualmente, jvm reclamará el nulo correspondiente.

Referencia suave (SoftReference):

Si un objeto tiene una referencia suave, si la memoria es suficiente, el objeto de referencia suave no se recuperará. Luego, cuando la memoria sea insuficiente, el objeto de referencia suave se reciclará. Si después de recuperar la referencia flexible, todavía no hay suficiente espacio de memoria, se lanza una excepción.

Referencia débil (referencia débil)

Si un objeto tiene una referencia débil, una vez que el recolector de basura comienza a escanear y encuentra la referencia débil, entonces el objeto apuntado por la referencia débil será reclamado, sin importar si la memoria es suficiente.

Referencia fantasma (PhantomReference)

Referencia fantasma: De hecho, es muy dorado con el nombre, es lo mismo que ninguna referencia; se usa para rastrear la actividad del objeto que no se recolecta basura; la referencia virtual debe usarse junto con la cola de referencia ( ReferenceQueue). Cuando el recolector de basura está a punto de reciclar un objeto, si encuentra que todavía tiene una referencia fantasma, agregará la referencia fantasma a la cola de referencia asociada con él antes de reclamar la memoria del objeto. El programa puede determinar si el objeto referenciado será recolectado como basura juzgando si se ha agregado una referencia virtual a la cola de referencias. Si el programa encuentra que se ha agregado una referencia fantasma a la cola de referencias, puede tomar las acciones necesarias antes de que se recupere la memoria del objeto referenciado.

Nota: Las referencias débiles y las referencias fantasma rara vez se usan en la programación real, y las referencias suaves se usan con más frecuencia. Las referencias blandas pueden acelerar la recuperación de la memoria basura de la JVM, mantener la seguridad operativa del sistema y evitar problemas como la falta de memoria (OutOfMemory).

Supongo que te gusta

Origin blog.csdn.net/weixin_43815275/article/details/114520651
Recomendado
Clasificación