Was ist ein Java -Müllsammler
Der Java-Müllsammler ist einer der drei wichtigen Module der Java Virtual Machine (JVM) (die anderen beiden sind Dolmetscher und Multi-Thread-Mechanismen). Es bietet Anwendungen mit automatischer Speicherzuweisung (Speicherzuweisung) und automatischer Speichersammlung (Müllsammlung). Beide Operationen treten auf dem Java -Haufen auf (ein Gedächtniswerk ist schnell). Zu einem bestimmten Zeitpunkt ist das Objekt live. Andernfalls wird es als Müll angesehen und kann vom Müllsammler recycelt und wiederverwendet werden. Müllabfuhrvorgänge erfordern CPU, Fäden, Zeit und andere Ressourcen. Daher ist es leicht zu verstehen, dass die Müllsammlungsbetriebe nicht in Echtzeit erfolgen (das Objekt wird unmittelbar nach dem Tod freigegeben). Wenn der Speicher verbraucht oder ein bestimmter Indikator erreicht ist (Schwellenwert, das Verhältnis des Speichers zu Gesamtspeicher, wie z. B. 0,75), wird der Müllsammlungsbetrieb ausgelöst. Es gibt eine Ausnahme vom Tod eines Objekts. Auch wenn ein Objekt vom Typ Java.lang.thread nicht referenziert wird, solange der Thread noch ausgeführt wird, wird er nicht recycelt.
Recyclingmechanismus
Nach statistischer Analyse haben die meisten Objekte in Java (einschließlich einiger anderer Sprachen auf hoher Ebene) kurze Lebenszyklen, sodass das Java-Speicher in Generationen verwaltet wird. Der Zweck der Generationenabteilung ist nichts anderes, als verschiedene Managementstrategien (Algorithmen) für Speicherblöcke verschiedener Generationen zu verwenden, um die Leistung zu maximieren. Im Vergleich zur älteren Generation ist die jüngere Generation normalerweise viel kleiner und die Recyclingfrequenz ist hoch und die Geschwindigkeit ist schnell. Ältere Menschen haben eine niedrige Recyclingfrequenz und dauern lange. Das Gedächtnis ist in der jungen Generation verteilt. Die Objekte in der jungen Generation werden nach mehreren Recycling -Zyklen automatisch zur alten Generation gefördert.
Designoptionen
Die Designauswahl beeinflusst die Implementierungsschwierigkeit von JVM -Müllkollektor- und JVM -Leistungsindikatoren und ist für verschiedene Szenarien geeignet. Es beschreibt die Stilmerkmale des Recycling -Algorithmus.
Serielles Recycling von Single-Thread-Recycling gegen multi-threades paralleles Recycling
Die Frage, ob der Recycling -Vorgang selbst von mehreren Threads verarbeitet wird. Die Vorteile des Einzel-Thread-Recyclings sind, dass es einfach und einfach ist, mit wenigen Fragmenten zu implementieren und für Einzelkernmaschinen geeignet zu sein. Das parallele Recycling von Multi-Threaded kann die CPU-Ressourcen für Multi-Core-Maschinen vollständig nutzen, die Recyclingzeit reduzieren und die Produktivität erhöhen. Der Nachteil ist, dass es komplex ist und einige Fragmente möglicherweise nicht recycelt werden.
Pause Anwendungs -Thread während des Recyclings vs. Recycling und Anwendung gleichzeitig
Geben Sie heraus, ob Sie den Anwendungs -Thread während des Recyclingvorgangs pausieren sollen. Die Vorteile von pausierenden Anwendungs -Threads sind, dass sie einfach, genau, relativ sauber und für kurze Zeit gereinigt werden (ausschließlich CPU -Ressourcen). Der Nachteil ist, dass die Pause von Anwendungsfäden dazu führt, dass die Anwendungsantwortzeit während des Müllsammelszyklus verlängert wird, und Systeme mit sehr hoher Echtzeitleistung sind empfindlicher. Die Vorteile der parallelen Verarbeitung von Recycling- und Anwendungs -Threads sind, dass die Anwendungsreaktionszeit relativ stabil ist und die Nachteile schwierig zu erreichen sind, eine hohe Reinigungsfrequenz und mögliche Fragmentierung.
Memory -Fragmente mit Entladung befreit verhandeln.
Diese drei Optionen beschreiben, wie die Blockfragmente für tote Speicherblocks verwaltet werden. Dead -Gedächtnisfragmente werden normalerweise überall auf dem Haufen verstreut. Wenn sie nicht verwaltet werden, wird es zwei Probleme geben. Wenn die Speicherzuweisung aufgrund des Auffindens des verfügbaren Speicheres langsam ist, führen kleine Fragmente zu Speicherabfällen (z. B. große Arrays erfordern große kontinuierliche Speicherfragmente). Es gibt zwei Möglichkeiten zu verwalten: Verschieben Sie das lebende Speicher auf ein Ende des Speicherblocks, zeichnen Sie die Startposition des verfügbaren Speichers auf oder kopieren Sie einfach den lebenden Speicher in einen neuen Speicherbereich, und der ursprüngliche Speicherblock ist vollständig leer.
Leistungsmetriken
①. Produktivität (Durchsatz)
Das Verhältnis der Nicht-Wiederherstellungszeit zu Gesamtzeit innerhalb eines längeren Zeitraums (nur lange Zeiträume sind aussagekräftig). Messung der Betriebseffizienz des Systems.
②. Garbage Collection Overhead
Das Verhältnis der Erholungszeit zu Gesamtzeit über einen längeren Zeitraum. Entsprechend der Produktivität beläuft sich die Summe 100%.
③. Zeit in Pause
Wenn Java -Virtual -Maschinen den Müll recyceln, pausieren einige Algorithmen die Ausführung aller Anwendungsfäden, und einige Systeme können für das Pause -Zeitintervall empfindlich sein.
④. Sammlung Häufigkeit
Wie lange dauert es, bis sich erholt hat?
⑤. Die Größe des Speicherverbrauchs (Fußabdruck)
Wie die Größe des Haufens.
⑥. Echtzeit (Schnelligkeit)
Wie lange dauert es, bis ein Objekt das Gedächtnis aus dem Objekt einnimmt, um recycelt zu werden?
Arten der Müllsammlung
Alle Recycler -Typen basieren auf der Generationstechnologie. Die virtuelle Maschine von Java Hotspot umfasst drei Generationen, die junge Generation, die alte Generation und die dauerhafte Generation.
①permanente Generation
Speichert Klassen, Methoden und deren Beschreibungsinformationen. Die anfängliche Größe und der Maximalwert können durch die beiden optionalen Optionen angegeben werden --xx: permSize = 64 m und -xx: maxpermSize = 128 m. Normalerweise müssen wir diesen Parameter nicht anpassen, die Standardgröße für dauerhafte Erzeugung reicht aus, aber wenn zu viele Klassen geladen und nicht genug sind, passen Sie einfach den Maximalwert an.
② ältere Generation
Die wichtigsten Speicherobjekte in der jungen Generation, die nach mehreren Recyclingzyklen immer noch überleben und ein Upgrade haben. Für einige große Speicherzuweisungen können sie natürlich auch direkt der dauerhaften Generation zugewiesen werden (ein extremes Beispiel ist, dass die junge Generation überhaupt nicht retten kann).
③young Generation
Die meisten Speicherzuweisung und Recyclingaktionen treten in jüngeren Generationen auf. Wie in der folgenden Abbildung gezeigt, ist die junge Generation in drei Bereiche unterteilt, das ursprüngliche Gebiet (Eden) und zwei kleine Überlebensbereiche (Überlebende). Die beiden Überlebensbereiche sind nach ihren Funktionen in und nach und nach ihren Funktionen unterteilt. Die meisten Objekte werden im ursprünglichen Bereich zugewiesen, und im Wohnbereich werden noch mehr als ein Müllsammlungsbetrieb überlebt.
Seriensammler
Ein einzelner Thread führt einen Recyclingvorgang durch und setzt die Ausführung aller Anwendungs -Threads während der Recyclingzeit aus. Der Standard -Recycler im Client -Modus ist gezwungen, über die Befehlszeilenoption -xx:+useserialGC festgelegt zu werden.
①Minor -Sammlung für junge Generationen
Bewegen Sie die überlebenden Objekte im Eden -Bereich in den Bereich. Wenn die TO -Fläche nicht installiert werden kann, wechseln Sie direkt zur alten Generation. Wenn der From -Bereich nicht installiert werden kann, wechseln Sie direkt zur alten Generation. Wenn der aus der Region sehr alt ist, Upgrade auf die alte Generation. Nach Abschluss des Recyclings sind sowohl Eden als auch aus Bereichen leer. Zu diesem Zeitpunkt werden die Funktionen von aus und zu ausgetauscht, von von und zu und zum Recycling leer. Die Entwurfsauswahl ist die Replikation.
②Der Recycling -Algorithmus für ältere Menschen (vollständige Sammlung)
Das Recycling der älteren Menschen ist in drei Schritte unterteilt: Mark, Sweep und Fusion. Die Markierungsbühne markiert alle überlebenden Objekte, die Clearing -Bühne setzt alle toten Objekte frei, und die Zusammenführungsstufe verschmilzt alle überlebenden Objekte in den vorherigen Teil der alten Generation und lässt alle freien Fragmente zurück. Die Auswahl der Konstruktion wird zusammengeführt, um die Gedächtnisfragmentierung zu verringern.
Parallelsammler
Verwenden Sie mehrere Fäden, um gleichzeitig die Müllsammlung durchzuführen. Die Multi-Core-Umgebung kann die CPU-Ressourcen vollständig nutzen, die Recyclingzeit verkürzen, die JVM-Produktivität und den Standardrecycler im Servermodus erhöhen. Wie der serielle Recycler wird die Ausführung aller Anwendungs -Threads während des Recyclings ausgesetzt. Gezwungen, über die Befehlszeilenoption -xx:+UseParallelGC anzugeben.
①Minor -Sammlung für junge Generationen
Mehrere Fäden werden verwendet, um den Müll zu recyceln, und der Algorithmus jedes Fadens ist der gleiche wie der eines seriellen Recyclers.
②Der Recycling -Algorithmus für ältere Menschen (vollständige Sammlung)
Die ältere Generation ist immer noch Single-Thread, genau wie der serielle Recycler.
Parallele kompakte Sammlung
Das Recycling der jüngeren Generation und der älteren Generation wird durch Multi-Threading verarbeitet. Angegeben durch die Befehlsoption -xx:+useParalleloldGC, xx: parallelgcthreads = 3 kann die Anzahl der am parallelen Recycling beteiligten Threads weiter angeben. Wie der serielle Recycler wird die Ausführung aller Anwendungs -Threads während des Recyclings ausgesetzt. Im Vergleich zu parallelen Recycler hat die ältere Generation eine kürzere Recyclingzeit, wodurch die Pausezeit verkürzt wird. Gezwungen, über xx zu spezifizieren:+useParalleloldGC -Befehlszeilenoption.
①Minor -Sammlung für junge Generationen
Gleich wie paralleler Sammler
②Der Recycling -Algorithmus für ältere Menschen (vollständige Sammlung)
Ältere Menschen sind in drei Schritte unterteilt: Markieren, Zählen und Verschmelzen. Die Idee der Teilung wird hier verwendet, und die alte Generation ist in viele Regionen fester Größe unterteilt. In der Markierungsphase sind alle überlebenden Objekte in n -Gruppen unterteilt (die Anzahl der recycelten Threads sollte der Anzahl der recycelten Threads übereinstimmen). Jeder Thread ist unabhängig für seine eigene Gruppe verantwortlich, die den Ort der überlebenden Objekte und die Informationen zur Überlebensrate der Region (Region) markiert und ihn als parallel markiert. Im statistischen Stadium wird die Überlebensrate jeder Region gezählt. Grundsätzlich ist die Überlebensrate vorne relativ hoch. Von vorne nach hinten wird die Ausgangsposition, die es wert ist, verschmolzen zu werden, gefunden (die Bereiche, in denen die meisten Objekte überleben, sind keine Verschmelzung wert). Die statistische Stufe ist seriell (einzelner Faden). In der Merge -Phase kopieren mehrere Threads die überlebenden Objekte von einer Region in einer anderen Region parallel.
Gleichzeitiger Mark-Sweep-Sammler
Die Anwendung wird auch als Kollektor mit niedriger Latenz bezeichnet und wird für eine kürzere Zeit durch verschiedene Mittel ausgesetzt. Führen Sie im Grunde die Recyclingoperationen gleichzeitig mit der Anwendung aus, ohne die Operationen zu verschmelzen und zu kopieren. Über die Befehlszeile -xx:+useconcmarksweepgc angegeben, können Sie auch die Verwendung des inkrementellen Recycling -Modus -xx:+useconcmarksweepgc in Single -Core- oder Dual -Core -Systemen angeben. Inkrementelles Recycling bezieht sich auf die Aufteilung des Recyclingvorgangs in mehrere Fragmente, die Ausführung eines Fragments und die Freisetzung von CPU -Ressourcen in die Anwendung und recycelt dann das letzte Ergebnis in Zukunft weiter. Ziel ist es auch, die Verzögerung zu verringern.
①Minor -Sammlung für junge Generationen
Gleich wie paralleler Sammler
②Der Recycling -Algorithmus für ältere Menschen (vollständige Sammlung)
Es ist in vier Schritte unterteilt: anfängliche Marke, gleichzeitige Marke, Bemerkung und gleichzeitige Sweep. Besondere Aufmerksamkeit, es gibt keinen Zusammenführungsbetrieb, daher wird es Fragmente geben.
Leistungsbewertungsinstrument für Java -Müllsammler
①XX:+printgcdetails und xx:+printgctimestamps
Informationen zur Startzeit, Dauer, Ersatzgedächtnis jeder Generation usw.
②jmap [Optionen] PID
JAMP 2043 View Shared -Objekte, die im Prozess 2043 geladen wurden. Normalerweise DLL -Dateien.
JMAP -HEAP 2043 Überprüfen Sie die Konfigurationsinformationen und die Verwendung des Speicherhaufens.
JMAP -permstat 2043 Überprüfen Sie den Ladestatus der dauerhaften Generation.
JMAP -Histo 2043 Überprüfen Sie die Lade- und Speicherverwendung der Klasse.
③JStat [Optionen] PID
JStat -Klasse 2043 Klasse Lade, Entladen, Speicherverbrauch.
JSTAT -GC 2043 GC Ausführungsstatus.
PostScript
Java bietet automatische Auswahl- und automatische Leistungsoptimierungsfunktionen. Listen Sie zuerst die Leistungsindikatoren, über die Sie besorgt sind, die Leistungsindikatoren, über die Sie über die Befehlszeile besorgt sind, zuerst die Leistungsindikatoren auf, bevor Sie Müllkollektor -Tuning durchführen, und automatisch von der JVM abgestimmt. Wenn Sie nicht zufrieden sind, können Sie den Müllsammler angeben. OutofMemory ist normalerweise auf unzureichendem Heap -Speicher zurückzuführen, sodass Sie die Befehlszeilen -xmx1024m und -xx: maxpermSize = 128 m einstellen können.
Das obige ist der gesamte Inhalt dieses Artikels. Ich hoffe, es wird für das Lernen aller hilfreich sein und ich hoffe, jeder wird Wulin.com mehr unterstützen.