Starke, weiche, schwache und virtuelle Referenzen von Java-Objekten

黄舟
Freigeben: 2016-12-20 13:34:10
Original
1750 Leute haben es durchsucht

Wenn in Versionen vor JDK1.2 ein Objekt nicht von einer Variablen referenziert wird, kann das Programm das Objekt nicht mehr verwenden. Das heißt, ein Programm kann ein Objekt nur verwenden, wenn es erreichbar ist. Das ist wie im täglichen Leben: Nach dem Kauf eines Artikels in einem Geschäft behält man ihn, wenn er nützlich ist, andernfalls wirft man ihn in den Mülleimer und wird von der Reinigung abgeholt. ​

Wenn ein Gegenstand in den Mülleimer geworfen wurde, ist es im Allgemeinen unmöglich, ihn aufzuheben und erneut zu verwenden.

Aber manchmal ist die Situation nicht so einfach. Es kann sein, dass Sie auf Gegenstände stoßen, die geschmacklos und geschmacklos sind, und es ist schade, sie wegzuwerfen. Diese Art von Gegenstand ist jetzt nicht mehr nützlich und die Aufbewahrung nimmt Platz in Anspruch. Es ist jedoch nicht kosteneffektiv, ihn sofort wegzuwerfen, da er möglicherweise in der Zukunft verwendet wird. Für solche entbehrlichen Gegenstände gilt als Kompromiss: Wenn zu Hause genügend Platz ist, behalten Sie ihn zuerst zu Hause. Wenn zu Hause nicht genügend Platz vorhanden ist, können Sie die unverzichtbaren Gegenstände nicht unterbringen, selbst wenn Sie den gesamten Müll zu Hause entfernen . Wenn Sie nicht genug Dinge des täglichen Bedarfs haben, werfen Sie diese entbehrlichen Gegenstände weg.

Ab JDK1.2 sind Objektreferenzen in vier Ebenen unterteilt, sodass das Programm den Lebenszyklus des Objekts flexibler steuern kann. Diese vier Ebenen, von hoch nach niedrig, sind: starke Referenz, weiche Referenz, schwache Referenz und virtuelle Referenz.



1. Starkes Zitat
Bei den zuvor in diesem Kapitel vorgestellten Zitaten handelt es sich tatsächlich um starke Zitate, die am häufigsten verwendet werden. Wenn ein Objekt einen starken Bezug hat, ähnelt es einem wesentlichen täglichen Bedarf und der Müllsammler wird es niemals zurückfordern. Wenn nicht genügend Speicherplatz vorhanden ist, würde die Java Virtual Machine lieber einen OutOfMemoryError-Fehler auslösen und das Programm abnormal beenden, als Objekte mit starken Referenzen willkürlich wiederzuverwenden, um das Problem des unzureichenden Speichers zu lösen.


2. Weiche Referenz (SoftReference)

Wenn ein Objekt nur weiche Referenzen hat, ähnelt es den Wegwerfartikeln des täglichen Bedarfs. Wenn genügend Speicherplatz vorhanden ist, wird er vom Garbage Collector nicht zurückgefordert. Wenn nicht genügend Speicherplatz vorhanden ist, wird der Speicher dieser Objekte zurückgefordert. Solange der Garbage Collector es nicht sammelt, kann das Objekt vom Programm verwendet werden. Soft-Referenzen können verwendet werden, um speicherempfindliche Caches zu implementieren.
Soft-Referenzen können in Verbindung mit einer Referenzwarteschlange (ReferenceQueue) verwendet werden. Wenn das durch die Soft-Referenz referenzierte Objekt Garbage Collection ist, fügt die Java Virtual Machine die Soft-Referenz der damit verbundenen Referenzwarteschlange hinzu.

3. Schwache Referenz (WeakReference)
Wenn ein Objekt nur eine schwache Referenz hat, ähnelt es einem Wegwerfartikel des täglichen Bedarfs. Der Unterschied zwischen schwachen Referenzen und weichen Referenzen besteht darin, dass Objekte mit nur schwachen Referenzen einen kürzeren Lebenszyklus haben. Während der Garbage-Collector-Thread den Speicherbereich in seinem Zuständigkeitsbereich scannt, wird, sobald ein Objekt mit nur schwachen Referenzen gefunden wird, dessen Speicher zurückgefordert, unabhängig davon, ob der aktuelle Speicherplatz ausreicht. Da der Garbage Collector jedoch ein Thread mit sehr niedriger Priorität ist, findet er Objekte mit nur schwachen Referenzen möglicherweise nicht unbedingt schnell.
Schwache Referenzen können in Verbindung mit einer Referenzwarteschlange (ReferenceQueue) verwendet werden. Wenn das durch die schwache Referenz referenzierte Objekt durch Müll gesammelt wird, fügt die Java Virtual Machine die schwache Referenz der damit verbundenen Referenzwarteschlange hinzu.


4. Phantomreferenz
Wie der Name schon sagt, ist „Phantomreferenz“ nur dem Namen nach bekannt. Im Gegensatz zu anderen Referenzen bestimmt eine Phantomreferenz nicht den Lebenszyklus des Objekts. Wenn ein Objekt nur Phantomreferenzen enthält, ist es so, als hätte es keine Referenzen und kann jederzeit durch Garbage Collection erfasst werden.
Virtuelle Referenzen werden hauptsächlich verwendet, um die Aktivitäten von Objekten zu verfolgen, die durch Müll gesammelt werden. Ein Unterschied zwischen virtuellen Referenzen, Soft-Referenzen und schwachen Referenzen besteht darin, dass virtuelle Referenzen in Verbindung mit einer Referenzwarteschlange (ReferenceQueue) verwendet werden müssen. Wenn der Garbage Collector die Wiederverwendung eines Objekts vorbereitet und feststellt, dass es noch über eine virtuelle Referenz verfügt, fügt er die virtuelle Referenz der zugehörigen Referenzwarteschlange hinzu, bevor er den Speicher des Objekts wiederverwendet. Das Programm kann feststellen, ob das referenzierte Objekt durch Garbage Collection erfasst wird, indem es ermittelt, ob eine virtuelle Referenz zur Referenzwarteschlange hinzugefügt wurde. Wenn das Programm feststellt, dass der Referenzwarteschlange eine virtuelle Referenz hinzugefügt wurde, kann es die erforderlichen Maßnahmen ergreifen, bevor der Speicher des referenzierten Objekts wiederverwendet wird.


In diesem Buch kann „Zitat“ entweder als Verb oder als Substantiv verwendet werden. Die Leser sollten die Bedeutung von „Zitat“ je nach Kontext unterscheiden.

Im Paket java.lang.ref werden drei Klassen bereitgestellt: SoftReference-Klasse, WeakReference-Klasse und PhantomReference-Klasse, die Soft-Referenzen, schwache Referenzen bzw. Phantom-Referenzen darstellen. Die ReferenceQueue-Klasse stellt eine Referenzwarteschlange dar, die in Verbindung mit diesen drei Referenzklassen verwendet werden kann, um die Aktivitäten der Java Virtual Machine beim Recycling der referenzierten Objekte zu verfolgen. Das folgende Programm erstellt ein String-Objekt, ein ReferenceQueue-Objekt und ein WeakReference-Objekt:



//Erstelle eine starke Referenz

String str = new String("hello");

//Erstellen Sie eine Referenzwarteschlange. ist eine generische Markierung, die angibt, dass die Referenz auf das String-Objekt in der Warteschlange gespeichert ist
ReferenceQueue 🎜>

/ / Erstellen Sie eine schwache Referenz, die auf das „Hallo“-Objekt verweist und mit der RQ-Referenzwarteschlange verknüpft ist

// ist ein generisches Tag, das angibt, dass WeakReference schwach auf den String verweist object
WeakReference wf = new WeakReference(str, rq);

Das Obige ist der Inhalt von starken, weichen, schwachen und virtuellen Referenzen von Java-Objekten. Bitte beachten Sie die chinesische PHP-Website (www.php.cn)!


Verwandte Etiketten:
Quelle:php.cn
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
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage
Über uns Haftungsausschluss Sitemap
Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!