In diesem Tutorial erfahren Sie mehr über mehrere bestehende Müllsammler. In Java ist die Müllsammlung ein automatischer Prozess, der Programmierer durch komplexe Aufgaben wie Speicherzuweisung und Recycling ersetzen kann. Dieser Artikel ist der dritte Artikel in der Müllsammlungs -Tutorial -Serie. Im vorherigen Teil 2 haben wir gesehen, wie die Müllsammlung in Java funktioniert. Das ist ein interessanter Artikel. Ich empfehle Ihnen, einen Blick darauf zu werfen. Der erste Teil führt die Java -Müllsammlung vor, die hauptsächlich JVM -Architektur, Heap -Speichermodell und einige Java -Begriffe umfasst.
Java hat vier Arten von Müllsammlern:
Serienmüllsammler
Parallel Müllsammler
Gleichzeitiger Tag -Scan -Müllsammler (CMS -Müllsammler)
G1 Müllsammler
Jeder Typ hat seine eigenen Stärken und Schwächen. Wichtig ist, dass wir beim Programmieren den Müllsammlertyp über die JVM auswählen können. Wir wählen durch Übergabe von Parametern an die JVM. Jeder Typ ist sehr unterschiedlich und kann uns eine völlig andere Anwendungsleistung bieten. Es ist sehr wichtig, jede Art von Müllsammler zu verstehen und die richtige Wahl auf der Grundlage der Anwendungsauswahl zu treffen.
1. Serienmüllsammler
Der serielle Müllsammler hält alle Fäden der Anwendung. Es ist für eine einzelne Thread -Umgebung konzipiert und verwendet nur einen einzelnen Thread für die Müllsammlung. Sie werden alle Anwendungs -Threads gefriert, sodass es möglicherweise nicht für Serverumgebungen geeignet ist. Es ist am besten für einfache Befehlszeilenprogramme geeignet.
Der serielle Müllkollektor kann über den JVM -Parameter -xx:+useSerialGC verwendet werden.
2. Parallel Müllsammler
Der parallele Müllsammler wird auch als Durchsatz bezeichnet. Es ist der Standardmüllsammler für JVM. Im Gegensatz zu seriellen Müllsammlern verwendet es Multithreading für die Müllsammlung. Ebenso friert es auch alle Anwendungsfäden bei der Durchführung von Müllsammlung ein
3.. Gleichzeitige Markscanning -Müllsammler
Die gleichzeitige Tag -Müllkollektion verwendet ein Multithread -Scannen des Heap -Speichers, markierten Instanzen, die gereinigt und markierte Instanzen aufräumen müssen. Der gleichzeitige Tag -Müllkollektor hält in den folgenden zwei Fällen nur alle Fäden der Anwendung.
Wenn sich das markierte Referenzobjekt im festen Bereich befindet;
Während der Müllsammlung werden die Daten im Heap -Speicher gleichzeitig geändert.
Das gleichzeitige Tag -Scan -Müllkollektor verwendet mehr CPU, um den Programmdurchsatz zu gewährleisten als parallele Müllsammler. Wenn wir mehr CPU für eine bessere Programmleistung zuweisen können, ist das gleichzeitige Aufschlag des Scan -Müllsammlers eine bessere Option als der gleichzeitige Müllsammler.
Öffnen Sie den gleichzeitigen Mark -Scan -Müllkollektor über den JVM -Parameter XX: + UseParNewgc.
4. G1 Garbage Collector
Der G1 -Müllsammler ist für Situationen geeignet, in denen der Heap -Speicher groß ist. Es unterteilt den Heap -Speicher in verschiedene Bereiche und Müll sammelt ihn gleichzeitig. G1 kann auch den verbleibenden Heap -Speicherraum nach Rückgewinnung des Speichers komprimieren. Die gleichzeitige Scan markiert den Müllsammler im STW -Fall den Speicher. Die G1 -Müllsammlung wird dem Gebiet mit dem meisten Müll im ersten Stück Priorität geben.
Verwenden Sie G1 Müllsammler über JVM Parameter XX:+UseG1GC
Neue Funktionen von Java8
Verwenden Sie bei Verwendung des G1 -Müllkollektors den JVM -Parameter -xx:+UseScringdedupplication. Wir können den Heap -Speicher optimieren, indem wir doppelte Zeichenfolgen entfernt und nur einen Char [] behalten. Diese Option wurde in Java8u20 eingeführt.
Wir haben allen vier Java -Müllsammlern gegeben, die anhand von Anwendungsszenarien, Hardwareleistung und Durchsatzanforderungen verwendet werden müssen.
JVM -Konfiguration für die Müllsammlung
Die folgenden JVM -Schlüsselkonfigurationen beziehen sich alle auf die Java -Müllsammlung.
Art des Müllsammlers laufen
| Konfiguration | beschreiben |
|---|---|
| -Xx:+useserialgc | Serienmüllsammler |
| -XX:+UseParallelgc | Parallel Müllsammler |
| -Xx:+useconcmarksweepgc | Gleichzeitiger Tag -Scan -Müllsammler |
| -Xx: parallelcmsThreads = | Gleichzeitiger Tag -Scan -Müllsammler = Anzahl der verwendeten Threads |
| -Xx:+useg1gc | G1 Müllsammler |
Optimierte Konfiguration von GC
| Konfiguration | beschreiben |
|---|---|
| -Xms | Initialisieren Sie die Haufenspeichergröße |
| -Xmx | Maximaler Haufen Speicherwert |
| -Xmn | Chronikgröße |
| -XX: Permsize | Initialisieren Sie die dauerhafte Generationsgröße |
| -Xx: maxpermSize | Maximale Kapazität der permanenten Generation |
Beispiel für die Verwendung von JVM GC -Parametern
java -xmx12m -xms3m -xmn1m -xx: permsize = 20m -xx: maxpermSize = 20m -xx:+useserialgc -jar java -application.jar
Zusammenfassen
Das Obige dreht sich alles um ein kurzes Verständnis der Arten von Java -Müllsammlern in diesem Artikel, und ich hoffe, dass es für alle hilfreich sein wird. Interessierte Freunde können weiterhin auf andere verwandte Themen auf dieser Website verweisen. Wenn es Mängel gibt, hinterlassen Sie bitte eine Nachricht, um darauf hinzuweisen. Vielen Dank an Freunde für Ihre Unterstützung für diese Seite!