Heim  >  Artikel  >  Java  >  JVM-Speicherverwaltung ------ Einführung in den Garbage Collector

JVM-Speicherverwaltung ------ Einführung in den Garbage Collector

黄舟
黄舟Original
2016-12-28 15:50:231338Durchsuche

Wir haben im vorherigen Kapitel verschiedene GC-Algorithmen besprochen. Was ist also ein Garbage Collector?
Um es für Laien auszudrücken: Wenn man eine Programmiersprache zur Implementierung eines Algorithmus verwendet, ist das resultierende Programm ein Garbage Collector. Nachdem wir nun über die Implementierung von Programmiersprachen gesprochen haben, wurde bei der Erörterung des Garbage Collectors bereits die spezifische Implementierung der virtuellen Maschine berücksichtigt.
Vielleicht wissen viele JAVA-Entwickler nicht, dass im JDK, das wir normalerweise verwenden, die Standard-JVM Hotspot ist. Mit anderen Worten, die JVM, die wir am häufigsten verwenden, ist die Implementierungsversion von Hotspot In LZ basiert dieses Mal alles auf der Hotspot-Version von JVM. Bitte beachten Sie dies.
Intuitiver können wir java -version eingeben, um die JVM-Version auf der Maschine zu überprüfen, die wir normalerweise entwickeln. Ich glaube, die meisten Affenfreunde sind mit diesem Befehl vertraut. Der Screenshot von LZs Maschine ist wie folgt.

JVM-Speicherverwaltung ------ Einführung in den Garbage Collector

Klassifizierung von Garbage Collectors

Wir haben oben erwähnt, dass Garbage Collectors eigentlich Programmiersprachenimplementierungen von Algorithmen sind. Da es sich um Programmiersprachen handelt, müssen Threads untrennbar miteinander verbunden sein. Als wir den Algorithmus zuvor erklärten, gingen wir immer davon aus, dass ein GC-Thread GC-Arbeit erledigt.
Daher werden Garbage Collectors grob in die folgenden drei Kategorien eingeteilt.
Serieller Kollektor: Er verfügt nur über einen GC-Thread und muss, wie bereits erwähnt, das Benutzerprogramm beim Ausführen anhalten (die Welt stoppen).
Parallelkollektor: Er verfügt über mehrere GC-Threads und muss auch das Benutzerprogramm anhalten (die Welt stoppen).
Gleichzeitiger Kollektor: Er verfügt über einen oder mehrere GC-Threads und muss das Benutzerprogramm in einigen Phasen anhalten (die Welt stoppen) und einen Teil der Phase gleichzeitig mit dem Benutzerprogramm ausführen.

Gleichzeitig und parallel

Nachdem ich die obigen Definitionen gelesen habe, glaube ich, dass einige Affenfreunde verwirrt sind. Manchmal sind sie Single-Threaded, manchmal Multi-Threaded und manchmal seriell. manchmal gleichzeitig, ist das alles Unsinn?
Zu Single-Thread und Multi-Thread muss man nicht mehr sagen. Das ist auch leicht zu verstehen. Parallel und parallel sind auch leicht zu unterscheiden.
Für viele Erklärungen zur Parallelität ist LZ der Meinung, dass es eine gibt, die am besten geeignet ist. Dies wird so erklärt: Parallelität bedeutet, dass zwei Aufgaben A und B unabhängig voneinander ausgeführt werden müssen, und nachdem Aufgabe A zuerst gestartet wird, beginnt Aufgabe B, bevor Aufgabe A endet.
Parallelität selbst ist relativ leicht zu verstehen. Welche Beziehung und Unterschied besteht also zur Parallelität?
Tatsächlich ist Parallelität eine Implementierungsmethode der Parallelität. LZ glaubt, dass Sie es vielleicht besser verstehen, wenn Sie dies sagen. Natürlich ist Parallelität nicht die einzige Möglichkeit, Parallelität zu erreichen. Eine andere Möglichkeit ist die Zeitscheibenumschaltung, mit der wir vertraut sind. Das heißt, Aufgabe A wird für eine Weile ausgeführt, Aufgabe B wird für eine Weile ausgeführt und dann abwechselnd ausgeführt.
Parallelität kann nur unter der Voraussetzung eines Multi-Core-Multiprozessors oder eines verteilten Systems (im Wesentlichen immer noch Multi-Core-Multiprozessor) auftreten, während eine alternative Ausführung oder Zeitscheibenumschaltung auf einem Single-Core-Prozessor erfolgt.

Garbage Collector im Hotspot

Wir haben oben kurz die Klassifizierung von Garbage Collector besprochen. In hotspotJVM verfügt jeder Typ von Garbage Collector über eine entsprechende Implementierung, wie folgt.
Implementierung des seriellen Kollektors: seriell (verwendet in der neuen Generation, unter Verwendung des Kopieralgorithmus), seriell alt (verwendet in der alten Generation, unter Verwendung des Markierungs-/Sortierungsalgorithmus)
Implementierung des parallelen Kollektors: ParNew (verwendet in der neuen Generation, unter Verwendung Kopieralgorithmus), Parallel Scavenge (verwendet in der neuen Generation, unter Verwendung des Kopieralgorithmus), Parallel alt (verwendet in der alten Generation, unter Verwendung des Markierungs-/Sortierungsalgorithmus)
Implementierung des gleichzeitigen Kollektors: gleichzeitiger Mark Sweep[CMS] (verwendet im alten Generation, unter Verwendung des Mark/Clear-Algorithmus)
Wie Sie sehen können, ist jeder der oben genannten Garbage Collectors für unterschiedliche Speicherbereiche konzipiert, da sie unterschiedliche Algorithmen verwenden. Sie werden normalerweise in der neuen Generation verwendet Generation verwenden alle den Kopieralgorithmus, und die für die alte Generation verwendeten verwenden den Mark/Clear- oder Mark/Complement-Algorithmus.
In praktischen Anwendungen müssen wir Garbage Collectors für die neue Generation und die alte Generation der JVM auswählen. Wir können sehen, dass es sowohl für die neue Generation als auch für die alte Generation drei Implementierungen gibt 3 *3=9 Auswahlmöglichkeiten. Dies ist jedoch nicht der Fall.

Tatsächlich gibt es für diese sechs Garbage Collectors nur sechs Möglichkeiten, da einige Garbage Collectors aus einer Reihe von Gründen, wie z. B. bestimmten Implementierungsmethoden, nicht zusammenarbeiten können, wie unten gezeigt.

JVM-Speicherverwaltung ------ Einführung in den Garbage Collector

Für das obige Bild ist der rote der serielle Kollektor, der grüne der parallele Kollektor und der einzige gelbe der gleichzeitige Kollektor. Die ersten drei sind die Sammler der neuen Generation und die unteren drei sind die Sammler der alten Generation. Wenn zwischen beiden eine Verbindung besteht, bedeutet das, dass beide zusammenarbeiten können.
Diese sechs Kombinationen sagen nicht aus, welche Kombination die stärkste und welche die schwächste ist. Auch hier gibt es nur die am besten geeignete, nicht die beste. Daher müssen wir ein gewisses Verständnis für jede Kombination haben, um bei der Verwendung einen geeigneteren Garbage Collector auswählen zu können.

Fazit

Das Obige ist der Inhalt der JVM-Speicherverwaltung ------ Einführung in den Garbage Collector. Weitere verwandte Inhalte finden Sie auf der chinesischen PHP-Website (www.php.cn)!


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