Heim  >  Artikel  >  Java  >  Erweiterte JVM-Funktionen-3. Garbage Collection zur Bestimmung des Objektüberlebens

Erweiterte JVM-Funktionen-3. Garbage Collection zur Bestimmung des Objektüberlebens

巴扎黑
巴扎黑Original
2017-06-26 11:34:111502Durchsuche

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

    Die Referenzzählmethode besteht darin, immer dann einen Verweis auf den Objektzähler hinzuzufügen, wenn auf das Objekt einmal verwiesen wird
  • , 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.

Erreichbarkeitsanalysealgorithmus

    Der Erreichbarkeitsanalysealgorithmus ist eine Mainstream-Implementierung, dieser Algorithmus Verwendet den Knoten, der zum GC-ROOT wird, als Wurzelknoten.
  • 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

  • Die Objekte, die als GC ROOT verwendet werden können, sind:

    Virtueller Maschinenstapel Das Referenzobjekt in der lokalen Variablentabelle

  • Der Verweis auf die statische Eigenschaft der Klasse in der Methode ist exklusiv
    • 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

      nicht lösen kann
    Erreichbarkeitsanalyse und Beurteilungsprozess

    •  

      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,

    • Es wird davon ausgegangen, dass keine Notwendigkeit zur Ausführung besteht. Wenn festgestellt wird, dass die Ausführung erforderlich ist, wird dies der Fall sein In eine Warteschlange namens F-Queue gestellt. Später erstellt JVM

    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()-Methode

    • Die 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!

    Stellungnahme:
    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