


Java erklärt die Speicherbereinigung und den Objektlebenszyklus ausführlich
Detaillierte Erklärung der Java-Garbage-Collection und des Objektlebenszyklus
Garbage-Collection und des Objektlebenszyklus in Java
1. Garbage-Collection
Garbage-Collection ist der Speicher in Java Programmierung Das Kernkonzept der Verwaltung, der Speicherverwaltungsmechanismus der JVM, wird als Garbage Collection-Mechanismus bezeichnet.
Nachdem ein Objekt erstellt wurde, wird es im Heap-Speicher der JVM abgelegt. Wenn auf dieses Objekt nicht mehr verwiesen wird, wird es von der JVM im Heap-Speicher recycelt. Erstellte Objekte können nicht reproduziert werden und es gibt keine Möglichkeit, sie über Programmanweisungen freizugeben. Das heißt, wenn ein Objekt nicht über die Stammsammlung im JVM-Laufzeitbereich erreicht (gefunden) werden kann, wird das Objekt als Müllobjekt bezeichnet. Die Stammsammlung besteht aus statischen Referenzfeldern und lokalen Referenzfeldern in der Klasse. Die JVM indiziert Objekte über die Stammsammlung.
Bei der Entwicklung von Java-Anwendungen werden häufig zwei von der JVM verwaltete Speichertypen verwendet: Heap-Speicher und Stapelspeicher. Einfach ausgedrückt wird der Heap-Speicher hauptsächlich zum Speichern von Objekten und Variablen verwendet, die vom Programm zur Laufzeit erstellt oder instanziiert werden. Zum Beispiel Objekte, die mit dem neuen Schlüsselwort erstellt wurden. Der Stapelspeicher wird zum Speichern von Methoden verwendet, die im Programmcode als statisch oder nicht statisch deklariert sind.
(1) Heap-Speicher
Im Heap-Speicher gespeicherte Objekte können von der JVM automatisch recycelt werden und können nicht auf andere Weise recycelt werden Das heißt, Entwickler können keine Objekte im Heap-Speicher zurückgewinnen, indem sie relevanten Code hinzufügen. Der Heap-Speicher ist normalerweise in zwei Bereiche unterteilt: den Bereich für neue Objekte und den Bereich für alte Objekte.
Neuer Objektbereich: Er kann in drei kleine Bereiche unterteilt werden: Eden-Bereich, Von-Bereich und Bis-Bereich. Der Eden-Bereich wird zum Speichern neu erstellter Objekte verwendet. Es ist wie ein Stapel. Neue Objekte werden erstellt, wenn die Objekte im Eden-Bereich voll sind Die Aufgabe des Sex-Tests besteht darin, zu erkennen, welche Objekte aus der Stammsammlung nicht erreichbar sind. Diese Objekte können von der JVM recycelt werden, und alle aktiven Objekte werden aus dem Eden-Bereich in den To-Bereich kopiert Einige Objekte werden vom Bereich „An“ in den Bereich „Von“ übertragen. Der gesamte Prozess der oben genannten Objektmigration wird von der JVM gesteuert.
Alter Objektbereich: Objekte im alten Objektbereich haben immer noch einen langen Lebenszyklus. Die meisten Müllobjekte des JVM-Systems stammen aus „kurzlebigen“ Objekten Alte Objektbereiche werden zu Müllobjekten. Zu diesem Zeitpunkt sind sie alle entsprechend markiert und das JVM-System recycelt diese Müllobjekte automatisch. Es wird empfohlen, das System nicht zu einer häufigen Müllsammlung zu zwingen. Dies liegt daran, dass die JVM nur begrenzte Systemressourcen für die Müllsammlung benötigt Erstens führt dies dazu, dass die Anwendung nicht schnell auf Benutzeranfragen reagieren kann, was sich auf die Gesamtleistung des Systems auswirkt.
(2) Stapelspeicher
Heapspeicher wird hauptsächlich zum Speichern von Objekten und Variablen verwendet, die vom Programm während der Laufzeit erstellt oder instanziiert werden. Zum Beispiel Objekte, die mit dem neuen Schlüsselwort erstellt wurden. Der Stapelspeicher wird zum Speichern von Methoden verwendet, die im Programmcode als statisch oder nicht statisch deklariert sind.
2. Lebenszyklus von Objekten in JVM
Im JVM-Laufzeitbereich kann der gesamte Lebenszyklus eines Objekts grob in 7 Phasen unterteilt werden:
Erstellungsphase;
unsichtbare Phase;
letzte Phase; >
Release-Phase Die oben genannten 7 Phasen bilden den vollständigen Lebenszyklus von Objekten in der JVM. (1) Erstellungsphase In der Objekterstellungsphase schließt das System den Objekterstellungsprozess hauptsächlich durch die folgenden Schritte ab:<1> Objekt weist Speicherplatz zu; <2> Rufen Sie den Konstruktor der Unterklasse rekursiv auf heißt.
Beim Erstellen von Objekten sollten Sie einige wichtige Anwendungsregeln beachten:
& lt; 3 & gt;
(2) Bewerbungsphase
Während der Objektreferenzphase weist das Objekt die folgenden Eigenschaften auf:
<1> Das System behält mindestens eine starke Referenz (starke Referenz) des Objekts bei; > ; Alle Verweise auf das Objekt sind starke Verweise (es sei denn, wir wenden ausdrücklich Folgendes an: Soft Reference, Weak Reference oder Phantom Reference): Bezieht sich auf den JVM-Speichermanager, der alle Pfade zu durchläuft Objekte im Heap, beginnend mit der Stammreferenzsammlung. Wenn ein Pfad zu einem Objekt kein Referenzobjekt enthält, wird die Referenz auf das Objekt als starke Referenz bezeichnet.
Durch die Einführung der Soft-Reference-Technologie können Java-Anwendungen den Speicher besser verwalten, das System stabilisieren, einen Systemspeicherüberlauf verhindern und vermeiden System stürzt ab. Daher sollte diese Technologie so weit wie möglich angewendet werden, wenn es um Objekte geht, die viel Speicher belegen und einen langen Lebenszyklus haben, aber nicht häufig verwendet werden. Verbessern Sie die Systemstabilität.
Schwache Referenz: Der größte Unterschied zwischen schwachen Anwendungsobjekten und weichen Referenzobjekten besteht darin, dass GC bei der Garbage Collection einen Algorithmus verwenden muss, um zu prüfen, ob weiche Anwendungsobjekte und schwache Referenzen recycelt werden sollen , GC sammelt immer. Schwache Referenzobjekte können von GC einfacher und schneller recycelt werden. In Kartenstrukturen werden häufig schwache Referenzobjekte verwendet.import java.lang.ref.SoftReference; ... A a = new A(); ... // 使用a ... // 使用完了a, 将它设置为soft引用类型,并且释放强引用 SoftReference sr = new SoftReference(a); a = null; ... // 下次使用时 if (sr != null) { a = sr.get(); } else { // GC由于低内存,已释放a,因此需要重新装载 a = new A(); sr = new SoftReference(a); }
Phantomreferenz: Phantomreferenz hat weniger Verwendungszwecke und wird hauptsächlich zur Unterstützung der Verwendung der Finalisierungsfunktion verwendet.
Phantom-Referenzobjekte beziehen sich auf Objekte, die die Finalisierungsfunktion abgeschlossen haben und nicht erreichbar sind, aber noch nicht vom GC recycelt wurden. Diese Art von Objekt kann bei der Fertigstellung einiger späterer Recyclingarbeiten hilfreich sein. Wir haben die Flexibilität des Ressourcenrecyclingmechanismus durch Überschreiben der Methode „clear()“ von Reference verbessert.
import java.lang.ref.WeakReference; ... A a = new A(); ... // 使用a ... // 使用完了a, 将它设置为Weak引用类型,并且释放强引用 WeakReference wr = new WeakReference(a); a = null; ... // 下次使用时 if (wr != null) { a = wr.get(); } else { a = new A(); wr = new WeakReference(a); }
Wenn sich ein Objekt in der unsichtbaren Phase befindet, bedeutet dies, dass wir in anderen Codebereichen nicht mehr darauf verweisen können und seine starke Referenz verschwunden ist . Beispielsweise überschreitet eine lokale Variable ihren sichtbaren
-Bereich.try { Object localObj = new Object(); localObj.doSomething(); } catch (Exception e) { e.printStackTrace(); } if (true) { // 此区域中localObj 对象已经不可视了, 编译器会报错。 localObj.doSomething(); }
(5) Sammelphase, Endphase und Freigabephase
Wenn sich ein Objekt in der Sammelphase, Endphase und Freigabephase befindet, weist das Objekt die folgenden drei Situationen auf:
<1> Der Sammler hat festgestellt, dass das Objekt nicht mehr erreichbar ist.
Vielen Dank fürs Lesen, ich hoffe, es kann Ihnen helfen, vielen Dank für Ihre Unterstützung dieser Website!
Weitere Artikel zu Javas detaillierter Erklärung der Garbage Collection und des Objektlebenszyklus finden Sie auf der chinesischen PHP-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 ...

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

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

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

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

Verstehen Sie die Zufälligkeit von kreisförmigen Abhängigkeiten beim Start des Frühlingsprojekts. Bei der Entwicklung des Frühlingsprojekts können Sie Zufälligkeit begegnen, die durch kreisförmige Abhängigkeiten beim Projektstart verursacht werden ...
