Tiefes Verständnis von JVM- und Garbage-Collection-Algorithmen

1. Was ist JVM?

      JVM ist die Abkürzung für Java Virtual Machine und ist die Kernkomponente zum Ausführen von Java-Programmen. JVM ist ein virtueller Computer, der eine unabhängige Laufumgebung bietet, in der Java-Programme auf verschiedenen Betriebssystemen ausgeführt werden können.

2. So ermitteln Sie die wiederverwertbaren Müllobjekte

     Der Garbage Collector in Java verwendet den Algorithmus „Erreichbarkeitsanalyse“, um die Erreichbarkeit von Objekten zu bestimmen. Dieser Algorithmus beginnt mit einer Reihe von Objekten namens „GC Roots“ und verfolgt alle Referenzobjekte über Referenzketten. Wenn ein Objekt über keine Referenzkette mit GC Roots verbunden werden kann, ist das Objekt nicht erreichbar und kann beurteilt werden. Es handelt sich um ein Müllobjekt .

In Java bezieht sich GC Roots auf eine Reihe von Objekten, die als live gelten, d. h. Objekte, die nicht vom Garbage Collector zurückgefordert werden. GC Roots umfassen die folgenden Beispiele:

  1. Objekte, auf die im Stapel der virtuellen Maschine verwiesen wird (lokale Variablentabelle im Stapel der Java Virtual Machine)
  2. Das Objekt, auf das die statische Klasseneigenschaft im Methodenbereich verweist
  3. Objekte, auf die durch Konstanten im Methodenbereich verwiesen wird
  4. Objekte, auf die von JNI (Java Native Interface) im nativen Methodenstapel verwiesen wird
  5. aktiver Thread

3. Gängige Müllalgorithmen

  1.Mark-Sweep-Algorithmus(Mark und Sweep)

       Dies ist einer der grundlegendsten Garbage-Collection-Algorithmen. Bei diesem Algorithmus markiert die JVM zunächst alle aktiven Objekte und löscht dann alle nicht markierten Objekte, um den von ihnen belegten Speicherplatz freizugeben. Nachteile: Fragmentierung.

  2.Kopiermethode(Kopieren)

       Dieser Algorithmus teilt den Speicherplatz in zwei gleiche Bereiche auf. Wenn in einem Bereich nicht mehr genügend Speicher vorhanden ist, kopiert die JVM die verbleibenden Objekte in einen anderen Bereich und löscht dann alle Objekte im ursprünglichen Bereich. Der Vorteil dieses Algorithmus besteht darin, dass er einfach und effizient ist, der Nachteil besteht jedoch darin, dass er zusätzlichen Speicherplatz benötigt.

   3.Mark-Compact-Algorithmus(Markieren und Kompaktieren)

       Dieser Algorithmus kombiniert die Vorteile von Mark-Clear- und Copy-Algorithmen. Er markiert zunächst alle aktiven Objekte, verschiebt sie dann an ein Ende und löscht alle Objekte am anderen Ende und organisiert so den Speicherplatz. Nachteile: Die Effizienz ist etwas geringer als beim Kopieren.

  4.Generational Garbage Collection-Algorithmus(Generational Garbage Collection)

       Es handelt sich um eine Strategie für die Speicherbereinigung. Sie unterteilt den Heap-Speicher entsprechend dem Überlebenszyklus des Objekts in die neue und die alte Generation und verwendet unterschiedliche Speicherbereinigungsalgorithmen und -strategien für Objekte verschiedener Generationen.

Neue Generation: inklusive Eden-Raum und zwei Survivor-Räumen (From und To)

Alte Generation: Enthält langlebige Objekte

Generationssammlungsalgorithmen umfassen normalerweise die folgenden zwei Hauptstrategien für die Müllsammlung:

  1. Garbage Collection der neuen Generation: Da der Lebenszyklus der meisten Objekte sehr kurz ist, ist die Häufigkeit der Garbage Collection in der neuen Generation relativ hoch. Der Kopieralgorithmus (Kopieren) wird normalerweise für die Speicherbereinigung verwendet, dh Objekte werden zwischen dem Eden-Raum und dem Survivor-Raum der neuen Generation kopiert und nicht mehr verwendete Objekte werden gelöscht. Dadurch können kurzlebige Objekte effektiv bereinigt und der Aufwand für die Speicherbereinigung verringert werden.
  2. Garbage Collection der alten Generation: Da die alte Generation langlebige Objekte enthält, ist die Garbage Collection in der alten Generation weniger häufig. Der Mark-Sweep- oder Mark-Compact-Algorithmus wird normalerweise für die Speicherbereinigung verwendet, um nicht verwendete Objekte der alten Generation zu bereinigen, Speicherplatz zu organisieren und die Speicherfragmentierung zu reduzieren.

4. Was sind die Garbage Collectors, die auf dem Generationsalgorithmus basieren?

(1)Seriennummer 

      Der serielle Kollektor verwendet einen Kopieralgorithmus (Kopieren), um die Speicherbereinigung der neuen Generation durchzuführen. Während der Garbage Collection kopiert der Serial Collector Objekte zwischen dem Eden-Bereich der neuen Generation und den beiden Survivor-Bereichen und räumt Objekte aus, die nicht mehr verwendet werden. Da es sich um eine Single-Thread-Anwendung handelt, wird die Anwendung angehalten, während die Speicherbereinigung stattfindet. Diese Methode wird als „Stop-The-World“ bezeichnet.

(2)ParNew

      Der ParNew-Kollektor ist ein paralleler Garbage Collector, der für die Garbage Collection der neuen Generation optimiert ist und sich für Anwendungsszenarien eignet, die einen hohen Durchsatz und eine hohe Reaktionsgeschwindigkeit erfordern.

(3)Parallele Spülung

      Das Entwurfsziel des Parallel Scavenge-Kollektors besteht darin, Speicherbereinigungsfunktionen mit hohem Durchsatz in einer Multi-Core-CPU-Umgebung bereitzustellen, d. h. so viele CPU-Ressourcen wie möglich für die Speicherbereinigung zu nutzen und gleichzeitig die Pausenzeit der Speicherbereinigung zu minimieren. Es verwendet einen Kopieralgorithmus (Kopieren), um die Speicherbereinigung der neuen Generation durchzuführen. Es kopiert auch Objekte zwischen dem Eden-Bereich und dem Survivor-Bereich der neuen Generation und löscht Objekte, die nicht mehr verwendet werden.

(4) CMS

       Der Garbage-Collection-Prozess des CMS-Collectors ist in zwei Phasen unterteilt: die Markierungsphase und die Löschphase. In der Markierungsphase markiert der CMS-Kollektor gleichzeitig alle Objekte, die recycelt werden müssen, über mehrere Threads. In der Löschphase löscht der CMS-Kollektor gleichzeitig die markierten Müllobjekte über mehrere Threads. Vorteile: Reduzieren Sie die Pausenzeit der Garbage Collection und verbessern Sie die Reaktionsgeschwindigkeit der Anwendung.

(5) Serienmäßig alt

       Der Serial Old Collector ist ein serieller Garbage Collector, der für die Garbage Collection der alten Generation optimiert ist. Er eignet sich für Anwendungsszenarien, die keinen sehr hohen Durchsatz erfordern, aber eine geringe Speichernutzung und Latenz erfordern.

(6)Parallel alt

       Der Parallel Old Collector wird für die Garbage Collection der alten Generation verwendet. Er verwendet eine Multithread-Parallelmethode zur Durchführung von Garbage Collection-Vorgängen und eignet sich für Anwendungen mit hohen Durchsatzanforderungen.

 

Guess you like

Origin blog.csdn.net/weixin_63357306/article/details/134362665