Java Language Différents types de référence


Exemple

java.lang.ref package java.lang.ref fournit des classes d'objets de référence, qui prennent en charge un degré d'interaction limité avec le garbage collector.

Java possède quatre principaux types de référence. Elles sont:

  • Référence forte
  • Référence faible
  • Référence souple
  • Référence fantôme

1. référence forte

C'est la forme habituelle de création d'objets.

MyObject myObject = new MyObject();

Le détenteur de la variable contient une référence forte à l'objet créé. Tant que cette variable est MyObject et contient cette valeur, l'instance MyObject ne sera pas collectée par le garbage collector.

2. Référence faible

Lorsque vous ne souhaitez pas conserver un objet plus longtemps et que vous devez effacer / libérer la mémoire allouée à un objet dès que possible, c'est la manière de procéder.

WeakReference myObjectRef = new WeakReference(MyObject);

Simplement, une référence faible est une référence qui n'est pas assez forte pour forcer un objet à rester en mémoire. Les références faibles vous permettent d'exploiter la capacité du ramasse-miettes à déterminer l'accessibilité pour vous, vous n'avez donc pas à le faire vous-même.

Lorsque vous avez besoin de l'objet que vous avez créé, utilisez .get() méthode .get() :

myObjectRef.get();

Le code suivant illustrera ceci:

WeakReference myObjectRef = new WeakReference(MyObject);
System.out.println(myObjectRef.get()); // This will print the object reference address
System.gc();
System.out.println(myObjectRef.get()); // This will print 'null' if the GC cleaned up the object

3. Référence souple

Les références molles sont légèrement plus fortes que les références faibles. Vous pouvez créer un objet référencé comme suit:

SoftReference myObjectRef = new SoftReference(MyObject);

Ils peuvent retenir la mémoire plus fortement que la référence faible. Si vous avez suffisamment de mémoire / ressources en mémoire, le garbage collector ne nettoiera pas les références logicielles avec autant d'enthousiasme que les références faibles.

Les références logicielles sont pratiques à utiliser dans la mise en cache. Vous pouvez créer des objets référencés en tant que cache, où ils sont conservés jusqu'à épuisement de la mémoire. Lorsque votre mémoire ne peut pas fournir suffisamment de ressources, le ramasse-miettes supprime les références logicielles.

SoftReference myObjectRef = new SoftReference(MyObject);
System.out.println(myObjectRef.get()); // This will print the reference address of the Object
System.gc();
System.out.println(myObjectRef.get()); // This may or may not print the reference address of the Object

4. Référence fantôme

C'est le type de référence le plus faible. Si vous avez créé une référence d'objet à l'aide de Phantom Reference, la méthode get() renverra toujours null!

L'utilisation de ce référencement est la suivante: "Les objets de référence Phantom, qui sont mis en file d'attente après le collecteur, déterminent que leurs référents peuvent être récupérés. Les références fantômes sont le plus souvent utilisées pour planifier des actions de nettoyage pré-mortem Mécanisme de finalisation Java. " - De la référence fantôme Javadoc d'Oracle.

Vous pouvez créer un objet de référence fantôme comme suit:

PhantomReference myObjectRef = new PhantomReference(MyObject);