Connaître les concepts de références faibles et douces est différente de la façon de les utiliser. Nous savons tous que le collecteur des ordures récupére la mémoire des objets qui répondent aux critères de recyclage, mais tous les programmeurs ne savent pas que les critères de recyclage dépend du type de référence pointant vers l'objet. C'est la principale différence entre les références faibles et les références douces en Java. Si un objet n'a qu'une référence faible pointant vers elle, le collecteur des ordures recycle immédiatement l'objet, ce qui est un moyen urgent de le recycler. Relativement, s'il y a des références douces pointant vers ces objets, ils ne seront recyclés que si le JVM nécessite de la mémoire. Le comportement spécial des citations faibles et douces les rend très utiles dans certains cas. Par exemple: les références souples peuvent être bien utilisées pour implémenter le cache. Les références faibles sont très adaptées au stockage des métadonnées, telles que le stockage des références de chargeur de classe.如果没有类被加载,那么也没有指向ClassLoader的引用。一旦上一次的强引用被去除,只有弱引用的ClassLoader就会被回收。 Dans cet article, nous parlerons de différents types de références Java, telles que: une forte référence et des fantômes.
Références faibles par rapport aux références douces en Java
Il existe quatre types de références en Java:
1. Référence forte
2. FaibleReference
3. Softreference
4. Phantomreference
Les références fortes sont les références les plus simples que nous utilisons dans la programmation, telles que la variable S dans le code String S = "ABC" est une référence forte à l'objet de chaîne "ABC". Tout objet indiqué par une forte référence ne peut pas être recyclé par le collecteur des ordures, et ces objets sont nécessaires dans le programme. Les références faibles sont représentées par la classe de classe Java.lang.ref.weakReference, et vous pouvez créer des références faibles en utilisant le code suivant:
La copie de code est la suivante:
Compteur compteur = nouveau compteur ();
FaibleReference <Coughts> FaibleCounter = nouveau FaibleReference <Cought> (Counter);
compteur = null; // maintenant le compteur est éligible à la collecte des ordures
Maintenant que vous attribuez une valeur nul au compteur de l'objet de référence fort, l'objet peut être recyclé par le collecteur de déchets. Étant donné que l'objet ne contient plus d'autres références fortes à l'heure actuelle, même le point de vue faible pointe vers l'objet ne peut pas empêcher le collecteur des ordures de recycler l'objet. Inversement, si l'objet contient une référence douce, l'objet compteur n'est pas recyclé immédiatement à moins que le JVM ne nécessite de mémoire. Les références souples dans Java sont représentées par la classe java.lang.ref.softreference.
La copie de code est la suivante:
Compteur prime = nouveau compteur ();
Softreference Soft = Nouvelle Softreference (Prime);
prime = null;
Une fois que la forte référence est vide, le deuxième comportement du code, le compteur, crée une référence douce. Compte tenu de cette différence entre les références douces et les références faibles, les références douces conviennent plus aux mécanismes de mise en cache, tandis que les références faibles conviennent plus pour stocker les métadonnées. Un autre exemple de l'utilisation de références faibles est le faiblehashmap, qui est une autre implémentation de l'interface MAP en plus de HashMap et Treemap. LowerHashMap a une caractéristique: les clés de la carte sont encapsulées comme des références faibles, ce qui signifie qu'une fois la forte référence supprimée, les références faibles à l'intérieur du faiblehashmap ne peuvent pas empêcher l'objet d'être collecté par le collecteur des ordures.
La référence virtuelle est la troisième référence disponible dans le package java.lang.ref, représenté par la classe java.lang.ref.phantomreference. Les objets avec des références virtuels peuvent être recyclés par le collecteur des ordures à tout moment. Semblable aux références faibles et aux références douces, vous pouvez créer des références virtuelles via le code suivant:
La copie de code est la suivante:
DigitalCounter Digit = new DigitalCounter ();
Phantomreference Phantom = Nouveau Phantomreference (chiffre);
chiffre = null;
Une fois la forte référence supprimée, l'objet DigitalCounter dans la troisième ligne peut être recyclé par le collecteur des ordures à tout moment. Parce qu'il n'y a qu'une seule référence virtuelle pointant vers l'objet, la référence virtuelle ne peut pas empêcher le collecteur des ordures de récupérer l'objet.
En plus de comprendre les références faibles, les références douces, les références virtuelles et lamhashmap, vous devez également comprendre ReferenceQueue. Dans le processus de création de références faibles, de références douces et de références virtuelles, vous pouvez fournir la référence de référence Referenceeue via le code suivant:
La copie de code est la suivante:
Referenceeue RefQueue = new Referenceeue ();
DigitalCounter Digit = new DigitalCounter ();
PhantomReference<DigitalCounter> phantom = new PhantomReference<DigitalCounter>(digit, refQueue);
Des instances de référence sont ajoutées à la file d'attente de référence, et vous pouvez recycler des objets en interrogeant la file d'attente de référence à tout moment. Le cycle de vie d'un objet peut être décrit dans la figure ci-dessous: