Heim >Java >javaLernprogramm >JAVA-Garbage-Collection-Mechanismus
Die Garbage Collection ist ein wichtiger Wissenspunkt in JAVA, und sie ist auch ein bekannter Wissenspunkt. Schließlich bringt JAVA immer die Garbage Collection mit, wenn sie vorgibt, fortgeschritten zu sein. Aus diesem Grund ist es zu einem häufigen Besucher in Vorstellungsgesprächen geworden. Der Interviewer bittet Sie häufig, zu erklären, was Garbage Collection ist und welche Prinzipien es hat. Natürlich, und auf jeden Fall, der Interviewer, der Sie zum Thema Garbage Collection befragt hat, weiß zu 99 % nur wenig darüber. Wenn der Interviewer Sie fragt, was der Garbage-Collection-Mechanismus ist, sollten Sie ernsthaft fragen: Welche VM fragen Sie nach dem Garbage-Collection-Mechanismus?
Da die Konzepte und Algorithmen der Garbage Collection komplex sind, werden Sie definitiv mehr verlieren als gewinnen, wenn Sie alle Details verstehen wollen. Wenn wir jedoch den folgenden Überblick über den Garbage-Collection-Mechanismus beherrschen, werden Sie meiner Meinung nach in den meisten Interviews keine Punkte verlieren.
1: Was ist Müll?
Wenn Sie beispielsweise ein Objekt nicht mehr verwenden, ist es Müll, wie zum Beispiel:
public void test01(){
User user = new User();
//...
}
Nachdem die test01-Methode ausgeführt wurde, hat das Benutzerobjekt keine Verwendung, dann ist es Müll.
2: Warum ist die Müllabfuhr notwendig?
Wir wissen, dass Objekte auf dem Heap gespeichert werden. Wie groß ist der Heap? Obwohl es über Befehlsparameter angepasst werden kann, ist die Java-Heap-Größe normalerweise unter 32-Bit-Systemen auf 2 GB festgelegt, 500 MB werden der neuen Generation (YoungGen) und 1,5 GB der alten Generation (OldGen) zugewiesen. Raum. Auch wenn es sich um eine 64-Bit-Version handelt, denken Sie darüber nach, wie viel Hardwarespeicher unser PC haben kann.
Daher wird der gesamte nutzlose Müll recycelt, um Platz für andere Gegenstände zu schaffen.
3: JDKs Standard-HotSpot-VM-Garbage-Collection-Mechanismus
1: Klassifizierung des Heap-Speichers
Um diesen Mechanismus zu verstehen, müssen Sie zunächst die Klassifizierung von Heaps verstehen. Ja, wir wissen nur, dass Objekte auf dem Heap vorhanden sind, aber wir wissen nicht, dass das Innere des Heaps auch in mehrere Räume unterteilt ist, wie in der folgenden Abbildung dargestellt:
Junge/neue Generation Die neue Generation
ist intern in Eden und zwei Survivor Spaces unterteilt. Alle neu erstellten Objekte werden der neuen Generation zugeordnet
Alte/Tenured Generation Alte/Tenured Generation
Die alte Generation wird zur Speicherung noch lebender Objekte verwendet nach mehreren Garbage Collections im Programm. Objekt
(PS: Nicht-Heap-Speicher der permanenten Generation, der zum Speichern statischer Dateien wie Java-Klassen, Methoden usw. verwendet wird. Die persistente Generation hat keine wesentliche Auswirkung auf die Müllabfuhr. )
2: Recyclingreihenfolge
Die Ausführungsreihenfolge für jeden Bereich ist wie folgt:
Die meisten von ihnen haben gerade erst die erstellten Objekte im Eden-Raum gespeichert.
Nachdem die erste GC im Eden-Raum durchgeführt wurde, werden die überlebenden Objekte in einen der Überlebensräume verschoben.
Danach, nach der Ausführung von GC im Eden-Raum, werden überlebende Objekte im selben Überlebensraum gestapelt.
Wenn ein Überlebensraum gesättigt ist, werden überlebende Objekte in einen anderen Überlebensraum verschoben. Der gesättigte Überlebensraum wird dann gelöscht.
Nach mehrmaligem Wiederholen der obigen Schritte werden noch lebende Objekte in die alte Generation verschoben.
4: Garbage Collector und Recycling-Algorithmus
Beide Generationstypen haben jeweils ihren eigenen Collector verwendet einen anderen Algorithmus. Denken Sie daran, dass Anfänger nicht jedes algorithmische Prinzip beherrschen müssen.
Vom Collector der neuen Generation verwendete Collectors: Serial, PraNew, Parallel Scavenge
Vom Collector der alten Generation verwendete Collectors: Serial Old, Parallel Old, CMS
Andere Die entsprechenden Der Algorithmus lautet wie folgt:
Serieller Kollektor (Kopieralgorithmus)
Einzelthread-Kollektor der neuen Generation, Markierung und Reinigung sind beide Single-Threaded, der Vorteil ist Einfachheit und Effizienz.
Serial Old Collector (Markierungs- und Sortieralgorithmus)
Single-Threaded-Collector der alten Generation, Version des Serial Collectors der alten Generation.
ParNew-Kollektor (Stop-Copy-Algorithmus)
Der Kollektor der neuen Generation kann als Multithread-Version des Serial-Kollektors betrachtet werden, der in Multi eine bessere Leistung bietet -Core-CPU-Umgebungen bieten eine bessere Leistung.
Parallel Scavenge Collector (Stop-Copy-Algorithmus)
Parallel Collector, der einen hohen Durchsatz und eine effiziente CPU-Nutzung anstrebt. Der Durchsatz beträgt im Allgemeinen 99 %, Durchsatz = Benutzer-Thread-Zeit / (Benutzer-Thread-Zeit + GC-Thread-Zeit). Es eignet sich für Szenarien wie Hintergrundanwendungen, die keine hohe Interaktionsreaktion erfordern.
Parallel Old Collector (Stop-Copy-Algorithmus)
Die alte Generation von Parallel Scavenge Collector, Parallel Collector, Durchsatzpriorität
CMS-Kollektor (Concurrent Mark Sweep) (Mark-Sweep-Algorithmus)
Hohe Parallelität, geringe Pausen, Streben nach kürzester GC-Recycling-Pausenzeit, relativ hohe CPU-Auslastung, schnelle Reaktionszeit, kurze Pausenzeit, Multi-Core-CPU ist die Wahl, um eine hohe Reaktionszeit anzustreben
5: Wann wird die Müllabfuhr durchgeführt?
Es gibt zwei Arten der Garbage Collection: Scavenge GC und Full GC.
Wenn ein neues Objekt generiert wird und sich nicht um Platz in Eden bewirbt, wird Scavenge GC ausgelöst. Zu diesem Zeitpunkt wird die Speicherbereinigung für die neue Generation durchgeführt.
Wenn die alte Generation (Tenured) gefüllt ist, ist die persistente Generation (Perm) gefüllt, System.gc() wird explizit aufgerufen und die Zuordnungsstrategie des Heaps für jede Domäne ändert sich dynamisch, nachdem der letzte GC ausgeführt wurde Vollständiger GC.
Beachten Sie, dass, egal um welche Art von Recycling es sich handelt, dies nicht bedeutet, dass der gesamte Müll recycelt wird, sondern dass eine bestimmte Menge Müll innerhalb eines Zeitraums entfernt wird, der auf der eigenen Beurteilung des Algorithmus basiert. Dieses Mal und diese Menge wissen wir nicht.
Das Obige ist der Speicherbereinigungsmechanismus, den Sie kennen müssen.
Das obige ist der detaillierte Inhalt vonJAVA-Garbage-Collection-Mechanismus. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!