Maison  >  Article  >  Java  >  Références Java

Références Java

PHPz
PHPzoriginal
2024-08-30 15:17:41842parcourir

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

Types de références Java avec exemples

Il existe quatre types de références Java basées sur le comportement du Garbage Collector sur les références.

  • Références fortes : Il s'agit de la référence par défaut en Java. Des références fortes peuvent être créées lorsqu'un objet est défini régulièrement.
  • Références faibles : Cette référence est à préciser explicitement. Les références faibles peuvent être créées en utilisant la classe java.lang.ref.WeakReference.
  • Références logicielles : Des références logicielles peuvent être créées à l'aide de la classe lang.ref.SoftReference.
  • Références fantômes : les références fantômes peuvent être créées en utilisant la classe lang.ref.PhantomReference.

1. De solides 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.

Exemple

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 :

Références Java

2. Faibles références

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.

Exemple

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 :

Références Java

3. Références douces

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);
Exemple

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 :

Références Java

4. Références fantômes

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.

Exemple

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 :

Références Java

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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Article précédent:Allocation de mémoire en JavaArticle suivant:Allocation de mémoire en Java