Los conceptos de cita fuerte, citas blandas, citas débiles y citas virtuales
Fuerte referencia
Citas fuertes se refieren a citas comunes en el código del programa. Por ejemplo, el objeto y el STR en el siguiente código son citas fuertes:
Objeto objeto = nuevo objeto (); Cadena str = "hola";
Mientras un objeto tenga una fuerte referencia asociada con él, el JVM definitivamente no reciclará este objeto. Incluso en ausencia de memoria, el JVM preferiría arrojar un error de Memoria que reciclar dicho objeto.
Por ejemplo, el siguiente código:
public class Main {public static void main (string [] args) {new Main (). Fun1 (); } public void Fun1 () {Object Object = New Object (); Objeto [] objarr = nuevo objeto [1000]; }}Al ejecutar el objeto [] objarr = nuevo objeto [1000]; Cuando se ejecuta a esta oración, si no hay memoria insuficiente, el JVM arrojará un error OOM y no reciclará el objeto apuntado por el objeto. Sin embargo, debe tenerse en cuenta que después de que se ejecuta Fun1, tanto el objeto como el objarr ya no existen, por lo que los objetos a los que señalan serán reciclados por el JVM.
Si desea interrumpir la asociación entre una referencia fuerte y un objeto, puede mostrar la referencia a NULL, de modo que el JVM recicle el objeto en el momento apropiado.
Softreference
Las referencias suaves se utilizan para describir algunos objetos útiles pero no requeridos, y se representan en Java utilizando la clase Java.Lang.Ref.SOFTreference. Para los objetos asociados con referencias suaves, el JVM reciclará el objeto solo cuando no hay memoria insuficiente. Por lo tanto, esto se puede usar bien para resolver el problema de OOM, y esta característica es muy adecuada para implementar el almacenamiento en caché: como el almacenamiento en caché de la página web, el almacenamiento en caché de imágenes, etc.
Se puede usar una referencia suave junto con una cola de referencia (referencequeue). Si el objeto mencionado por la referencia suave es reciclado por el JVM, la referencia suave se agregará a la cola de referencia asociada. Aquí hay un ejemplo de uso:
import java.lang.ref.weakreference; public class Main {public static void main (string [] args) {weakReference <String> sr = new WeakReference <String> (new String ("Hello")); System.out.println (Sr.get ()); System.gc (); // notifica al GC del JVM para realizar el sistema de recolección de basura.out.println (Sr.get ()); }}Referencia débil
Las referencias débiles también se usan para describir objetos no esenciales. Cuando el JVM realiza la recolección de basura, los objetos asociados con referencias débiles se reciclarán independientemente de si la memoria es suficiente. En Java, use la clase java.lang.ref.weakreference para representarla. Aquí hay un ejemplo de uso:
import java.lang.ref.weakreference; public class Main {public static void main (string [] args) {weakReference <String> sr = new WeakReference <String> (new String ("Hello")); System.out.println (Sr.get ()); System.gc (); // notifica al GC del JVM para realizar el sistema de recolección de basura.out.println (Sr.get ()); }}Fantomreferencia
Las referencias virtuales son diferentes de las referencias suaves anteriores y las referencias débiles, y no afectan el ciclo de vida del objeto. En Java, use java.lang.ref.phantomreference clase para representarla. Si un objeto está asociado con una referencia virtual, el recolector de basura puede reciclarlo en cualquier momento, al igual que no se asocia ninguna referencia.
Cabe señalar que las referencias virtuales deben usarse en asociación con la cola de referencia. Cuando el recolector de basura se está preparando para reciclar un objeto, si encuentra que tiene una referencia virtual, agregará esta referencia virtual a la cola de referencia asociada. El programa puede comprender si el objeto referenciado se recolectará basura juzgando si se ha agregado una referencia virtual a la cola de referencia. Si el programa encuentra que se ha agregado una referencia virtual a la cola de referencia, puede tomar las acciones necesarias antes de que se recicle la memoria del objeto referenciado.
Continuación adicional de las citas blandas y débiles
A menudo usamos citas fuertes al escribir código. Para los otros tres tipos de citas, los más utilizados son citas blandas y citas débiles. Estos dos tienen similitudes y diferencias. Todos se usan para describir objetos no esenciales, pero los objetos asociados con referencias suaves solo se reciclarán cuando no hay memoria insuficiente, mientras que los objetos asociados con referencias débiles siempre se reciclarán cuando el JVM sea recolectado de basura. En vista de las características anteriores, las referencias suaves son adecuadas para el almacenamiento en caché. Cuando la memoria es insuficiente, el JVM puede reciclar la memoria. Se pueden usar referencias débiles para evitar la fuga de memoria en la función de devolución de llamada. Debido a que las funciones de devolución de llamada son a menudo clases internas anónimas y guardan referencias implícitamente a clases externas, si la función de devolución de llamada se vuelve a llamar en otro hilo, y si la clase externa necesita ser reciclada en este momento, las filtraciones de memoria, porque las clases internas anónimas almacenan fuertes referencias a clases externas.
El artículo anterior habla brevemente sobre la diferencia entre los cuatro métodos de cita en Java es todo el contenido que comparto con usted. Espero que pueda darle una referencia y espero que pueda apoyar más a Wulin.com.