Les concepts de la citation forte, de la citation douce, de la faible citation et de la citation virtuelle
Référence forte
Les citations solides se réfèrent aux devis communs dans le code du programme. Par exemple, l'objet et STR dans le code suivant sont tous deux des citations solides:
Objet objet = nouveau objet (); String str = "Hello";
Tant qu'un objet a une forte référence qui lui est associée, le JVM ne recyclera certainement pas cet objet. Même en l'absence de mémoire, le JVM préfère lancer une erreur d'ouvre que recycler un tel objet.
Par exemple, le code suivant:
classe publique Main {public static void main (String [] args) {new Main (). fun1 (); } public void fun1 () {objet objet = new object (); Objet [] objarr = nouvel objet [1000]; }}Lors de l'exécution de l'objet [] objarr = nouvel objet [1000]; Lorsque vous exécutez cette phrase, en cas de mémoire insuffisante, le JVM lancera une erreur OOM et ne recyclera pas l'objet pointé par l'objet. Cependant, il convient de noter qu'après l'exécution de Fun1, l'objet et l'objarr n'existent plus, de sorte que les objets auxquels ils pointent seront recyclés par le JVM.
Si vous souhaitez interrompre l'association entre une référence forte et un objet, vous pouvez afficher la référence à NULL, afin que le JVM recyclera l'objet au moment approprié.
Perfectionnement
Les références douces sont utilisées pour décrire certains objets utiles mais non requis, et sont représentés en Java à l'aide de la classe Java.lang.ref.Softreference. Pour les références souples d'objets associés, le JVM ne recyclera l'objet que lorsqu'il n'y a pas de mémoire insuffisante. Par conséquent, cela peut être bien utilisé pour résoudre le problème de l'OOM, et cette fonctionnalité est très adaptée à la mise en œuvre de la mise en cache: telles que la mise en cache des pages Web, la mise en cache d'image, etc.
Une référence douce peut être utilisée en conjonction avec une file d'attente de référence (ReferenceQueue). Si l'objet référencé par la référence souple est recyclé par le JVM, la référence douce sera ajoutée à la file d'attente de référence associée. Voici un exemple d'utilisation:
import java.lang.ref.weakReference; classe publique main {public static void main (string [] args) {faibleSeference <string> sr = new Waibreference <string> (new String ("Hello")); System.out.println (sr.get ()); System.gc (); // informer le GC de JVM pour Garbage Collection System.out.println (sr.get ()); }}Référence faible
Des références faibles sont également utilisées pour décrire des objets non essentiels. Lorsque le JVM effectue une collection de déchets, les objets associés à des références faibles seront recyclés, que la mémoire soit suffisante. En Java, utilisez la classe java.lang.ref.weakReference pour la représenter. Voici un exemple d'utilisation:
import java.lang.ref.weakReference; classe publique main {public static void main (string [] args) {faibleSeference <string> sr = new Waibreference <string> (new String ("Hello")); System.out.println (sr.get ()); System.gc (); // informer le GC de JVM pour Garbage Collection System.out.println (sr.get ()); }}Fantôme
Les références virtuelles sont différentes des références douces et références faibles précédentes, et elles n'affectent pas le cycle de vie de l'objet. Dans Java, utilisez la classe java.lang.ref.phantomreference pour la représenter. Si un objet est associé à une référence virtuelle, il peut être recyclé par le collecteur des ordures à tout moment, tout comme aucune référence ne lui est associée.
Il convient de noter que les références virtuelles doivent être utilisées en association avec la file d'attente de référence. Lorsque le collecteur des ordures se prépare à recycler un objet, s'il constate qu'il a une référence virtuelle, il ajoutera cette référence virtuelle à la file d'attente de référence associée. Le programme peut comprendre si l'objet référencé sera collecté en jugeant si une référence virtuelle a été ajoutée à la file d'attente de référence. Si le programme constate qu'une référence virtuelle a été ajoutée à la file d'attente de référence, elle peut prendre les mesures nécessaires avant que la mémoire de l'objet référencé soit recyclé.
Une compréhension approfondie des citations douces et faibles
Nous utilisons souvent de fortes citations lors de l'écriture de code. Pour les trois autres types de citations, les plus couramment utilisés sont les citations douces et les citations faibles. Ces deux ont à la fois des similitudes et des différences. Ils sont tous utilisés pour décrire des objets non essentiels, mais les objets associés aux références souples ne seront recyclés que lorsqu'il y a une mémoire insuffisante, tandis que les objets associés à des références faibles seront toujours recyclés lorsque le JVM est collecté à la poubelle. Compte tenu des fonctionnalités ci-dessus, les références douces conviennent à la mise en cache. Lorsque la mémoire est insuffisante, le JVM peut recycler la mémoire. Des références faibles peuvent être utilisées pour empêcher les fuites de mémoire dans la fonction de rappel. Étant donné que les fonctions de rappel sont souvent des classes internes anonymes et enregistrent implicitement des références aux classes externes, si la fonction de rappel est rappelée dans un autre fil, et si la classe externe doit être recyclée en ce moment, les fuites de mémoire, car les classes internes anonymes stockent de fortes références aux classes externes.
L'article ci-dessus parle brièvement de la différence entre les quatre méthodes de citation en Java est tout le contenu que je partage avec vous. J'espère que vous pourrez vous faire référence et j'espère que vous pourrez soutenir Wulin.com plus.