Heim Java javaLernprogramm Starke Referenzen, weiche Referenzen, schwache Referenzen und virtuelle Referenzen in der Java-Entwicklung

Starke Referenzen, weiche Referenzen, schwache Referenzen und virtuelle Referenzen in der Java-Entwicklung

Jul 23, 2018 am 10:05 AM

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);
Nach dem Login kopieren

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> softRef = new SoftReference>(param);
System.out.println(softRef.get().get("status"));
Nach dem Login kopieren

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"));
Nach dem Login kopieren

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());
Nach dem Login kopieren

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

}
Nach dem Login kopieren

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!

Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn

Heiße KI -Werkzeuge

Undresser.AI Undress

Undresser.AI Undress

KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover

AI Clothes Remover

Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool

Undress AI Tool

Ausziehbilder kostenlos

Clothoff.io

Clothoff.io

KI-Kleiderentferner

Video Face Swap

Video Face Swap

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

Heiße Werkzeuge

Notepad++7.3.1

Notepad++7.3.1

Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version

SublimeText3 chinesische Version

Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1

Senden Sie Studio 13.0.1

Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6

Dreamweaver CS6

Visuelle Webentwicklungstools

SublimeText3 Mac-Version

SublimeText3 Mac-Version

Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Verursacht die Sicherheitssoftware des Unternehmens, die die Anwendung nicht ausführt? Wie kann man es beheben und es lösen? Verursacht die Sicherheitssoftware des Unternehmens, die die Anwendung nicht ausführt? Wie kann man es beheben und es lösen? Apr 19, 2025 pm 04:51 PM

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

Wie vereinfachte ich Probleme mit der Feldzuordnung im Systemdocking mithilfe des Mapstruct? Wie vereinfachte ich Probleme mit der Feldzuordnung im Systemdocking mithilfe des Mapstruct? Apr 19, 2025 pm 06:21 PM

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

Wie kann ich elegante Entitätsklassenvariablennamen erhalten, um Datenbankabfragebedingungen zu erstellen? Wie kann ich elegante Entitätsklassenvariablennamen erhalten, um Datenbankabfragebedingungen zu erstellen? Apr 19, 2025 pm 11:42 PM

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

Wie konvertiere ich Namen in Zahlen, um die Sortierung zu implementieren und die Konsistenz in Gruppen aufrechtzuerhalten? Wie konvertiere ich Namen in Zahlen, um die Sortierung zu implementieren und die Konsistenz in Gruppen aufrechtzuerhalten? Apr 19, 2025 pm 11:30 PM

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

Wie identifiziert Intellij IDEA die Portnummer eines Spring -Boot -Projekts, ohne ein Protokoll auszugeben? Wie identifiziert Intellij IDEA die Portnummer eines Spring -Boot -Projekts, ohne ein Protokoll auszugeben? Apr 19, 2025 pm 11:45 PM

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

Wie kann ich elegant den variablen Entitätsklassennamen erstellen, wenn Tkmybatis für Datenbankabfrage verwendet werden? Wie kann ich elegant den variablen Entitätsklassennamen erstellen, wenn Tkmybatis für Datenbankabfrage verwendet werden? Apr 19, 2025 pm 09:51 PM

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

Wie kann ich Java -Objekte sicher in Arrays umwandeln? Wie kann ich Java -Objekte sicher in Arrays umwandeln? Apr 19, 2025 pm 11:33 PM

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 verwendet ich die Redis -Cache -Lösung, um die Anforderungen der Produktranking -Liste effizient zu erkennen? Wie verwendet ich die Redis -Cache -Lösung, um die Anforderungen der Produktranking -Liste effizient zu erkennen? Apr 19, 2025 pm 11:36 PM

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

See all articles