L'un des avantages du langage Java est qu'il gère automatiquement la mémoire du programmeur, sans avoir à se soucier de la gestion de la mémoire et sans avoir à s'inquiéter de libérer la mémoire de l'objet lorsque celui-ci n'en a plus besoin. Le thread Java Garbage Collector fait cela pour le programmeur ; il balaie l'objet indésirable et libère la mémoire sous le contrôle de JVM. Le programmeur peut également contrôler le moment où les objets seront récupérés lorsque cela est nécessaire en utilisant les classes java.lang.ref. Il existe quatre types de références en Java en fonction de la manière dont elles sont récupérées ou en fonction du comportement du Garbage Collector sur les références.
Commencez votre cours de développement de logiciels libres
Développement Web, langages de programmation, tests de logiciels et autres
Il existe quatre types de références Java basées sur le comportement du Garbage Collector sur les références.
Une référence forte est généralement celle que nous utilisons lorsque nous écrivons le code Java ou que nous créons un objet. Un objet qui a une référence forte et actif dans la mémoire n'est pas éligible pour le garbage collection, un objet qui a des points fortement référencés sur null peut être récupéré. Par exemple, l'extrait de code ci-dessous où la variable ob est l'objet de type ClassA.
ClassA ob = new ClassA();
Un objet « ob » a une référence forte vers laquelle pointe vers la classe ClassA ; cet objet ne peut pas être récupéré car un ob est un objet actif.
Si la référence 'ob' pointe vers null comme ci-dessous –
ob = null;
Maintenant, l'objet ne fait plus référence à la classe ClassA ; un objet est désormais éligible à la collecte des ordures.
Code :
package p1; class ClassA { // something } public class Demo { public static void main( String[] arg ) { ClassA ob = new ClassA(); // default reference or Strong Reference System.out.println(ob); ob = null; // Now object <u>ob</u> pointing to null and is available for garbage collection System.out.println(ob); } }
Sortie :
La référence faible est éligible au garbage collection. Une fois que JVM détecte un objet avec une référence faible, cet objet est marqué et les déchets sont collectés lorsque le thread du garbage collector est exécuté par JVM. Ces types de références sont utilisés dans WeakHashMap pour l'entrée de l'objet. Les références faibles peuvent être créées par la classe lang.ref.WeakReference. La référence faible pouvant être utilisée dans une application était d'établir DBConnection, et une fois la base de données fermée, la connexion libérée par Garbage Collector. Par exemple, l'extrait de code ci-dessous où la variable ob est l'objet de type ClassA.
ClassA ob = new ClassA();
Un objet « ob » est une référence forte pour le rendre récupérable, nous devons convertir sa révérence en référence faible comme ci-dessous –
WeakReference<ClassA> weakob = new WeakReference<ClassA>(ob);
Maintenant, l'objet fait faiblement référence à la classe ClassA, un objet est désormais disponible pour le garbage collection, et il est récupéré lorsque la JVM exécute le thread de garbage collection.
Code :
package p1; import java.lang.ref.WeakReference; class ClassA { // something } public class Demo { public static void main( String[] arg ) { ClassA ob = new ClassA(); // default reference or Strong Reference System.out.println(ob); // now create Weak Reference object to which <u>ob</u> object is pointing WeakReference <ClassA> weakob = new WeakReference <ClassA>(ob); // Now <u>ob</u> object is eligible for garbage collection, but it will be remove from memory when JVM needs memory ob = null; System.out.println(ob); // weakly referenced <u>ob</u> object can get back ob = weakob.get(); System.out.println(ob); } }
Sortie :
L'objet de référence logicielle n'est pas éligible pour le garbage collection jusqu'à ce que la JVM manque de mémoire ou que la JVM ait vraiment besoin de mémoire. Les références faibles peuvent être créées par la classe lang.ref.SoftReference. Par exemple, la référence douce peut créer de la même manière qu'une référence faible.
SoftReference <ClassA> softob = new SoftReference <ClassA>(ob);
Code :
package p1; import java.lang.ref.SoftReference; class ClassA { // something } public class Demo { public static void main( String[] arg ) { ClassA ob = new ClassA();// default reference or Strong Reference System.out.println(ob); // now create soft Reference object which ob object is pointing SoftReference <ClassA> softob = new SoftReference <ClassA>(ob); // Now ob object is eligible for garbage collection, but it will be garbage collected when JVM badly needs memory ob = null; System.out.println(ob); // the soft referenced, ob object can get back ob = softob.get(); System.out.println(ob); } }
Sortie :
Un objet de référence fantôme est disponible pour le garbage collection, mais avant de le récupérer, un objet est placé dans une file d'attente de référence nommée « file d'attente de référence » par la JVM ; après l'appel de la fonction finalize() sur l'objet. Les références faibles peuvent être créées par la classe lang.ref. Référence fantôme.
Code :
package p1; import java.lang.ref.ReferenceQueue; import java.lang.ref.PhantomReference; class ClassA { // something } public class Demo { public static void main( String[] arg ) { ClassA ob = new ClassA(); // default reference or Strong Reference System.out.println(ob); // now Create Reference queue object ReferenceQueue <ClassA> refq = new ReferenceQueue <ClassA>(); // Create Phantom Reference object to which <u>ob</u> object is pointing PhantomReference <ClassA> phantomob = new PhantomReference <ClassA>(ob,refq); // Now <u>ob</u> object is eligible for garbage collection, but it will be kept in '<u>refq</u>' before removing ob = null; System.out.println(ob); // to get back object which has been Phantom referenced returns null ob = phantomob.get(); System.out.println(ob); } }
Sortie :
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!