Suche…


Unterschiedliche Referenztypen

java.lang.ref Paket java.lang.ref stellt Referenzobjektklassen bereit, die eine begrenzte Interaktion mit dem Garbage Collector unterstützen.

Java hat vier Hauptreferenztypen. Sie sind:

  • Starke Referenz
  • Schwache Referenz
  • Weiche Referenz
  • Phantomreferenz

1. Starke Referenz

Dies ist die übliche Form zum Erstellen von Objekten.

MyObject myObject = new MyObject();

Der Variablenhalter hält einen starken Verweis auf das erstellte Objekt. Solange diese Variable aktiv ist und diesen Wert enthält, wird die MyObject Instanz nicht vom Garbage Collector erfasst.

2. Schwache Referenz

Wenn Sie ein Objekt nicht länger behalten möchten und den für ein Objekt zugewiesenen Speicher so schnell wie möglich löschen / freigeben müssen, gehen Sie auf diese Weise vor.

WeakReference myObjectRef = new WeakReference(MyObject);

Eine schwache Referenz ist einfach eine Referenz, die nicht stark genug ist, um ein Objekt im Speicher zu halten. Schwache Referenzen ermöglichen es Ihnen, die Fähigkeit des Müllsammlers zu nutzen, um die Erreichbarkeit für Sie zu bestimmen, so dass Sie dies nicht selbst tun müssen.

Wenn Sie das von Ihnen erstellte Objekt benötigen, verwenden Sie einfach die .get() Methode:

myObjectRef.get();

Der folgende Code veranschaulicht dies beispielhaft:

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. Weiche Referenz

Weiche Referenzen sind etwas stärker als schwache Referenzen. Sie können ein weich referenziertes Objekt wie folgt erstellen:

SoftReference myObjectRef = new SoftReference(MyObject);

Sie können den Speicher stärker als den schwachen Bezug halten. Wenn Sie über genügend Speicher / Ressourcen verfügen, bereinigt der Garbage Collector die weichen Referenzen nicht so begeistert wie schwache Referenzen.

Weiche Verweise sind beim Zwischenspeichern von Nutzen. Sie können weich referenzierte Objekte als Cache erstellen, in denen sie aufbewahrt werden, bis der Speicher voll ist. Wenn Ihr Speicher nicht genügend Ressourcen bereitstellen kann, entfernt der Garbage Collector weiche Referenzen.

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. Phantomreferenz

Dies ist der schwächste Referenzierungstyp. Wenn Sie mit Phantom Reference einen Objektverweis erstellt haben, gibt die get() Methode immer null zurück!

Die Verwendung dieser Referenzierung ist folgende: "Phantomreferenzobjekte, die in eine Warteschlange eingereiht werden, nachdem der Collector feststellt, dass ihre Referenzen andernfalls zurückgefordert werden können. Phantomreferenzen werden am häufigsten verwendet, um Bereinigungsaktionen vor der Mortem-Aktion flexibler zu gestalten, als dies mit der Java-Finalisierungsmechanismus. " - Aus der Phantomreferenz Javadoc von Oracle.

Sie können ein Objekt der Phantom-Referenz wie folgt erstellen:

PhantomReference myObjectRef = new PhantomReference(MyObject);


Modified text is an extract of the original Stack Overflow Documentation
Lizenziert unter CC BY-SA 3.0
Nicht angeschlossen an Stack Overflow