


Starke Referenzen, weiche Referenzen, schwache Referenzen und virtuelle Referenzen in der Java-Entwicklung
Aufgrund des automatischen GC-Recyclingmechanismus verfügt Java über einen relativ vollständigen Referenzzählmechanismus. Java unterteilt die von Objekten gehaltenen Referenzen in der Reihenfolge ihrer Stärke in starke Referenzen, weiche Referenzen und virtuelle Referenzen GC kann Instanzen, die ihren Lebenszyklus überschritten haben, schnell recyceln, sodass die Speichernutzung der Maschine dynamisch niedrig ist. Eine unsachgemäße Verwendung führt zu Speicherlecks, was dazu führt, dass der Speicher der Maschine erschöpft ist und wir dies klar kontrollieren müssen Die Eigenschaften des Programms, das Sie schreiben, bestehen darin, das Programm in einem kontrollierbaren Zustand zu halten, zumindest in dem, was derzeit als kontrollierbar gilt. Lassen Sie uns zunächst die Klassifizierung von Zitaten verstehen und dann die Verwendungsszenarien untersuchen.
1. Starkes Zitat
Was wir normalerweise verwenden, ist ein starkes Zitat, wie zum Beispiel:
Map<String, Object> param = new HashMap<String, Object>(16);
Ein Zitat in der oben genannten Form ist ein starkes Zitat, Solange das Zitat noch vorhanden ist, kann der GC den der Referenz entsprechenden Speicherplatz auf dem Heap nicht recyceln. Die Verwendung und die Regeln starker Referenzen sind selbstverständlich.
2. Weiche Zitate
Sehen wir uns zunächst an, wie man weiche Zitate verwendet:
Map<String, Object> param = new HashMap<String, Object>(16); param.put("status", 1); SoftReference
Es gibt noch eine weitere Anwendungsebene, die jedoch leicht zu verstehen ist Die Soft-Referenz ist nur eine Art Referenz, die der starken Referenz unterlegen ist. Nur wenn die virtuelle Maschine denkt, dass der Speicher nicht ausreicht, wird der Heap-Speicherplatz, auf den durch die Soft-Referenz verwiesen wird, auch dann angezeigt, wenn sie sich noch im Lebenszyklus befindet Soft-Referenzen werden zu diesem Zeitpunkt weiterhin zwangsweise zurückgefordert, sodass die Leistung von Soft-Referenzen unter normalen Umständen dieselbe ist wie die von starken Referenzen Enge, weiche Referenzen spiegeln seine Eigenschaften wider.
3. Schwache Referenz
So verwenden Sie eine schwache Referenz:
Map<String, Object> param = new HashMap<String, Object>(16); param.put("status", 1); WeakReference> weakRef = new WeakReference >(param); System.out.println(weakRef.get().get("status"));
Eine schwache Referenz wird fast genauso verwendet wie eine weiche Referenz Soft-Referenz. Eine Referenz, eine schwache Referenz auf eine Instanz, wird vom Referenzzähler nicht gezählt. Wenn eine Instanz also keine starke Referenz, sondern nur eine schwache Referenz hat, kann sie null zurückgeben, je nachdem, ob der GC recycelt wurde Es gibt, wie im obigen Beispiel, gleichzeitig starke und schwache Referenzen. Schauen wir uns die Situation an, in der nur schwache Referenzen vorhanden sind:
WeakReference<Map<String, Object>> weakRef = new WeakReference<Map<String, Object>>(new HashMap<String, Object>(16)); System.gc(); System.out.println(weakRef.get());
Zu diesem Zeitpunkt ist der gedruckte Wert null bedeutet, dass schwache Referenzen für die GC-Referenztechnologie nicht gültig sind. Beachten Sie dies, wenn Sie sie verwenden.
4. Virtuelle Referenzen
Die Methode zur Verwendung virtueller Referenzen unterscheidet sich geringfügig von der oben genannten. Wenn der GC die Wiederverwendung eines Objekts vorbereitet und feststellt, dass es noch eine virtuelle Referenz hat, Diese virtuelle Referenz wird der zugehörigen Referenzwarteschlange hinzugefügt. In Abschnitt 3.2.3 der zweiten Ausgabe von „Vertiefendes Verständnis der Java Virtual Machine: JVM Advanced Features and Best Practices“ gibt es eine Passage, in der es heißt: „Virtuelle Referenzen werden auch Ghost-Referenzen oder Phantom-Referenzen genannt.“ Ob ein Objekt über eine virtuelle Referenz verfügt, hat keinen Einfluss auf seine Lebensdauer. Der einzige Zweck des Festlegens einer virtuellen Referenzbeziehung für ein Objekt besteht darin, es beim Empfang einer Systembenachrichtigung wiederverwenden zu können. Nach JDK 1.2 wird die PhantomReference-Klasse bereitgestellt, um virtuelle Referenzen zu implementieren Der folgende Code zeigt eine Demo:
public class PhantomReference<T> extends Reference<T> { public T get() { return null; } public PhantomReference(T referent, ReferenceQueue<? super T> q) { super(referent, q); } }
Das gedruckte Ergebnis ist null und eine Instanz von PhantomReference, die überprüft, ob eine Objektinstanz nicht über eine virtuelle Referenz abgerufen werden kann und der Referenz Fakten hinzugefügt werden die Referenzwarteschlange.
Das obige ist der detaillierte Inhalt vonStarke Referenzen, weiche Referenzen, schwache Referenzen und virtuelle Referenzen in der Java-Entwicklung. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Heiße KI -Werkzeuge

Undresser.AI Undress
KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover
Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool
Ausziehbilder kostenlos

Clothoff.io
KI-Kleiderentferner

Video Face Swap
Tauschen Sie Gesichter in jedem Video mühelos mit unserem völlig kostenlosen KI-Gesichtstausch-Tool aus!

Heißer Artikel

Heiße Werkzeuge

Notepad++7.3.1
Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version
Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1
Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6
Visuelle Webentwicklungstools

SublimeText3 Mac-Version
Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Heiße Themen

Fehlerbehebung und Lösungen für die Sicherheitssoftware des Unternehmens, die dazu führt, dass einige Anwendungen nicht ordnungsgemäß funktionieren. Viele Unternehmen werden Sicherheitssoftware bereitstellen, um die interne Netzwerksicherheit zu gewährleisten. ...

Die Verarbeitung von Feldzuordnungen im Systemdocken stößt häufig auf ein schwieriges Problem bei der Durchführung von Systemdocken: So kartieren Sie die Schnittstellenfelder des Systems und ...

Bei Verwendung von MyBatis-Plus oder anderen ORM-Frameworks für Datenbankvorgänge müssen häufig Abfragebedingungen basierend auf dem Attributnamen der Entitätsklasse erstellt werden. Wenn Sie jedes Mal manuell ...

Lösungen zum Umwandeln von Namen in Zahlen zur Implementierung der Sortierung in vielen Anwendungsszenarien müssen Benutzer möglicherweise in Gruppen sortieren, insbesondere in einem ...

Beginnen Sie den Frühling mit der Intellijideaultimate -Version ...

Wenn Sie TKMybatis für Datenbankabfragen verwenden, ist das Aufbau von Abfragebedingungen ein häufiges Problem. Dieser Artikel wird ...

Konvertierung von Java-Objekten und -Arrays: Eingehende Diskussion der Risiken und korrekten Methoden zur Konvertierung des Guss-Typs Viele Java-Anfänger werden auf die Umwandlung eines Objekts in ein Array stoßen ...

Wie erkennt die Redis -Caching -Lösung die Anforderungen der Produktranking -Liste? Während des Entwicklungsprozesses müssen wir uns häufig mit den Anforderungen der Ranglisten befassen, z. B. das Anzeigen eines ...
