1. Übersicht
Im Laufzeitdatenbereich werden der Programmzähler, der virtuelle Maschinenstapel und der lokale Methodenstapel alle mit dem Thread erstellt und zerstört .
Daher ist ihre Speicherzuweisung und -wiederverwendung deterministisch und sie werden wiederverwendet, wenn die Methode oder der Thread endet. Der Java-Heap und der Methodenbereich sind ungewiss. Die Größe der während der Ausführung des Programms erstellten Objekte ist nur bekannt, wenn das Programm ausgeführt wird 🎜>
2. „Überlebensalgorithmus“
Um festzustellen, ob ein Objekt lebt, gibt es zwei Hauptalgorithmen: Referenzzählmethode und Erreichbarkeitsanalysealgorithmus
Referenzzählmethode
, der Zählerwert wird um 1 erhöht und der Referenzablauf wird um 1 verringert. Wenn der Zähler 0 ist, bedeutet dies, dass er nicht erneut verwendet wird.
Suchen Sie von diesem Wurzelknoten aus nach unten. Wenn keine Referenzkette vorhanden ist, die das Objekt mit dem GC-ROOT verbindet (d. h. es ist nicht erreichbar), wird es verwendet bedeutet, dass das Das Objekt nicht verfügbar ist
Das exponierte Objekt in der Methode
Referenzobjekt in der lokalen Methode
Derzeit ist der Erreichbarkeitsanalysealgorithmus zum Mainstream-Algorithmus geworden. Der Grund dafür ist, dass der Referenzzähleralgorithmus das Problem der
Objekte, die sich gegenseitig referenzieren
Nachdem eine Erreichbarkeitsanalyse für das Objekt durchgeführt wurde, Es wird festgestellt, dass keine Referenzkette damit verbunden ist, daher wird es zum ersten Mal markiert. Und führen Sie einen Filter aus. Die Filterbedingung ist, ob die finalize()-Methode ausgeführt werden muss. Wenn das Objekt die Finalisierungsmethode nicht abdeckt oder die Finalisierungsmethode aufgerufen wurde,
automatisch einen Finalizer-Thread mit niedriger Priorität, um die Finalisierungsmethode dieser Objekte auszuführen, und GC führt dann das Objekt in F- aus. QUEUE wird zum zweiten Mal markiert. Wenn das Objekt zu diesem Zeitpunkt nicht entkommen kann, wird es recycelt.
finalize()-MethodeDie finalize-Methode wurde oben schon oft erwähnt, Bitte beachten Sie, dass die Finalisierungsmethode des Objekts vom System nur einmal automatisch aufgerufen wird. Es wird nicht empfohlen, diese Methode zu verwenden. Ihre Funktion kann stattdessen mit try-finally abgeschlossen werden
Das obige ist der detaillierte Inhalt vonErweiterte JVM-Funktionen-3. Garbage Collection zur Bestimmung des Objektüberlebens. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!