Dieser Artikel vermittelt Ihnen relevantes Wissen über Java, das hauptsächlich Probleme im Zusammenhang mit JVM-Garbage Collectors löst, einschließlich Serial und Serial Old Collectors, ParNew Collectors, Parallel und Parallel Old Collectors usw. Werfen wir einen Blick auf den folgenden Inhalt. Ich hoffe, es wird für alle hilfreich sein.
Empfohlenes Lernen: „Java-Video-Tutorial“
Parallelität und Parallelität
- Parallel (Parallel): Parallel beschreibt die Beziehung zwischen mehreren Garbage-Collector-Threads, was darauf hinweist, dass es mehrere solcher Garbage-Collector-Threads gleichzeitig gibt Zeit Threads arbeiten zusammen, und normalerweise befindet sich der Benutzer-Thread zu diesem Zeitpunkt standardmäßig im Wartezustand.
- Parallelität (gleichzeitig): Parallelität beschreibt die Beziehung zwischen dem Garbage-Collector-Thread und dem Benutzer-Thread und zeigt an, dass sowohl der Garbage-Collector-Thread als auch der Benutzer-Thread gleichzeitig ausgeführt werden. Da der Benutzerthread nicht eingefroren ist, kann das Programm weiterhin auf Dienstanforderungen reagieren. Da der Garbage Collector-Thread jedoch einen Teil der Systemressourcen belegt, wird der Verarbeitungsdurchsatz der Anwendung zu diesem Zeitpunkt in gewissem Maße beeinträchtigt.
Klassifizierung von Garbage Collectors
1. Entsprechend der Anzahl der Threads (für die Garbage Collection verwendet) kann es in serielle Garbage Collectors
und parallele Garbage Collectors unterteilt werden.
Serieller Garbage Collector: Nur eine CPU darf gleichzeitig Garbage Collection-Vorgänge ausführen. Zu diesem Zeitpunkt wird der Arbeitsthread angehalten, bis die Garbage Collection-Arbeit abgeschlossen ist.
- Paralleler Garbage Collector: Mehrere CPUs können zur gleichzeitigen Durchführung der Garbage Collection verwendet werden.
-
2. Je nach Arbeitsmodus
Je nach Arbeitsmodus kann er in „gleichzeitigen Garbage Collector“ und „exklusiven Garbage Collector“ unterteilt werden.
Gleichzeitiger Garbage Collector: Es darf nur eine CPU gleichzeitig Garbage Collection-Vorgänge ausführen. Zu diesem Zeitpunkt wird der Arbeitsthread angehalten, bis die Garbage Collection-Arbeit abgeschlossen ist. Exklusiver Garbage Collector: Mehrere CPUs können zur gleichzeitigen Durchführung der Garbage Collection verwendet werden.
-
- 3. Je nach Fragmentierungsverarbeitungsmethode
Je nach Arbeitsmodus kann es in
komprimierten Garbage Collector und
nicht komprimierten Garbage Collector unterteilt werden.
Der komprimierende Müllsammler komprimiert und organisiert die verbleibenden Objekte nach Abschluss des Recyclings, um die Fragmente nach dem Recycling zu beseitigen. 7 klassische Garbage Collectors : CMS, G1
-
Sammler der neuen Generation: Seriell, ParNew, Parallel-Scavenge; Sammler der alten Generation: Seriell alt, Parallel alt, CMS; Old Collector
Der Serial Collector ist der einfachste und älteste Collector. Er war einst (vor JDK 1.3.1) die einzige Wahl für den Collector der neuen Generation der virtuellen HotSpot-Maschine. Der serielle Kollektor ist ein - Single-Threaded-Arbeitskollektor. Wenn er die Speicherbereinigung durchführt, müssen alle anderen Arbeitsthreads angehalten werden, bis die Sammlung abgeschlossen ist. Serial Old ist die alte Generation des Serial Collectors. Serieller Collector verwendet Kopieralgorithmus, serielles Recycling und den „Stop The World“-Mechanismus
, um die Speicherbereinigung durchzuführen. -
Serial Old CollectorMarken – Komprimierungsalgorithmus, serielle Sammlung und „Stop The World“-Mechanismusführen die Garbage Collection durch.
ParNew-Kollektor
- Der ParNew-Kollektor ist im Wesentlichen eine Multithread-Parallelversion des seriellen Kollektors. Zusätzlich zur gleichzeitigen Verwendung mehrerer Threads für die Speicherbereinigung umfasst der Rest des Verhaltens alle verfügbaren Steuerparameter zum Serienkollektor, Sammelalgorithmus, Stop The World, Objektzuordnungsregeln, Recyclingstrategie usw. stimmen vollständig mit dem Serienkollektor überein.
-
- Parallel und Parallel Old Collector
Der Parallel Scavenge Collector ist ebenfalls ein Collector der neuen Generation. Er ist auch ein Collector, der auf dem Mark-Copy-Algorithmus basiert und auch ein Multithread-Collector ist, der parallel sammeln kann.
Im Gegensatz zum ParNew-Kollektor besteht das Ziel des Parallel-Scavenge-Kollektors darin, einen kontrollierbaren
Durchsatz
zu erreichen. Er wird auch als durchsatzorientierter Garbage Collector bezeichnet.
Durchsatz: Das Verhältnis der Zeit, die der Prozessor mit der Ausführung von Benutzercode verbringt, zur insgesamt verbrauchten Prozessorzeit.
Hoher Durchsatz kann die Prozessorressourcen optimal nutzen und die Rechenaufgaben des Programms so schnell wie möglich erledigen. Er eignet sich hauptsächlich für Analyseaufgaben, die im Hintergrund ausgeführt werden und nicht zu viel Interaktion erfordern.
Parallel Old ist die alte Generation des Parallel Scavenge-Collectors, unterstützt die gleichzeitige Multithread-Sammlung und wird basierend auf dem Mark-Collation-Algorithmus implementiert.
CMS Collector
CMS (Concurrent Mark Sweep) Collector ist ein Collector, der darauf abzielt, die kürzeste Recycling-Pausezeit zu erreichen. Der
CMS-Kollektor wird basierend auf dem Mark-Clear-Algorithmus implementiert. Seine Funktionsweise kann in vier Schritte unterteilt werden, darunter:
Anfängliche Markierung- Die anfängliche Markierung markiert nur die Objekte, mit denen GC Roots direkt in Verbindung gebracht werden kann. Geschwindigkeit Sehr schnell;
Gleichzeitiges Markieren- Die gleichzeitige Markierungsphase ist der Prozess des Durchlaufens des gesamten Objektdiagramms ausgehend von den direkt zugeordneten Objekten von GC Roots. Dieser Prozess dauert lange, erfordert jedoch kein Anhalten des Benutzerthreads und kann gleichzeitig ausgeführt werden der Garbage-Collection-Thread;
Neumarkierung- Die Neumarkierungsphase dient dazu, die Markierungsdatensätze des Teils der Objekte zu korrigieren, die sich aufgrund des fortgesetzten Betriebs des Benutzerprogramms während der gleichzeitigen Markierung geändert haben ist normalerweise etwas länger als die anfängliche Markierungsphase, aber auch viel kürzer als die gleichzeitige Markierungsphase Diese Phase kann auch gleichzeitig mit dem Benutzerthread stattfinden.
Der CMS-Collector kann „
Floating Garbage
“ nicht verarbeiten und es besteht die Möglichkeit eines „Con-current Mode Failure“-Fehlers, der zu einem weiteren vollständigen „Stop The World“-Full-GC führen kann. Während der gleichzeitigen Markierungs- und gleichzeitigen Reinigungsphase des CMS wird der Benutzerthread natürlich weiterhin ausgeführt, während das Programm ausgeführt wird. Dieser Teil der Müllobjekte wird jedoch nicht angezeigt, nachdem der Markierungsvorgang abgeschlossen ist werden in der aktuellen Müllsammlung entsorgt und müssen in der nächsten Müllsammlung entsorgt werden. Dieser Teil des Mülls wird „schwebender Müll“ genannt.
Das liegt auch daran, dass der Benutzer-Thread während der Garbage-Collection-Phase weiterlaufen muss, sodass genügend Speicherplatz für den Benutzer-Thread reserviert werden muss. Daher kann der CMS-Kollektor nicht warten, bis die alte Generation fast vollständig gefüllt ist Andere Collectors Um erneut zu sammeln, muss während der gleichzeitigen Sammlung etwas Platz für den Programmbetrieb reserviert werden.
CMS ist ein Kollektor, der auf dem „Mark-and-Clear“-Algorithmus basiert. Dies bedeutet, dass am Ende der Sammlung eine große Anzahl von Raumfragmenten generiert wird, was zu großen Problemen führt für die Zuordnung großer Objekte.
Warum nicht den Tag-Komprimierungsalgorithmus verwenden, um Fragmentierung zu vermeiden?
Denn wenn gleichzeitiges Löschen zum Organisieren des Speichers mit Markierungskomprimierung verwendet wird, kann der vom ursprünglichen Benutzerthread verwendete Speicher nicht verwendet werden. Um sicherzustellen, dass der Benutzerthread weiterhin ausgeführt wird, müssen die Ressourcen, auf denen er ausgeführt wird, nicht beeinträchtigt werden. Die Flaggenkomprimierung eignet sich besser für den Einsatz in „Stop The World“-Szenarien.
G1-Kollektor (Garbage First) Garbage First war der Pionier der Designidee des Kollektors für die lokale Sammlung und der Speicherlayoutform basierend auf der Region. Es handelt sich um einen Garbage Collector, der hauptsächlich für serverseitige Anwendungen, hauptsächlich für Multi-Anwendungen, gedacht ist. Kerngeräte mit CPU und großem Speicher können die GC-Pausenzeit mit sehr hoher Wahrscheinlichkeit einhalten und weisen auch hohe Durchsatzleistungseigenschaften auf.
Für alle anderen Collectors vor dem G1-Collector war der Zielbereich der Garbage Collection entweder die gesamte neue Generation, die gesamte alte Generation oder der gesamte Java-Heap. G1 kann einen Sammelsatz für jeden Teil des Heap-Speichers zum Recycling bilden. Das Messkriterium ist nicht mehr, zu welcher Generation er gehört, sondern welcher Teil des Speichers die größte Menge an Müll speichert und den größten Recycling-Vorteil hat.
Eigenschaften des G1-Recyclers
1. Parallelität und Parallelität: Während des G1-Recyclings können mehrere GC-Threads gleichzeitig arbeiten.
Parallelität: G1 kann abwechselnd mit der Anwendung ausgeführt werden, und ein Teil der Arbeit kann gleichzeitig mit der Anwendung ausgeführt werden. Daher wird die Anwendung im Allgemeinen während der gesamten Recyclingphase nicht vollständig blockiert.
2. Sammlung nach Generationen
- G1 ist immer noch nach der Generationssammlungstheorie konzipiert, aber sein Heap-Speicherlayout unterscheidet sich ganz offensichtlich von anderen Kollektoren: G1 besteht nicht mehr auf einer festen Größe und einer festen Anzahl von Generationsgebietsunterteilungen, sondern zusammenhängend Der Java-Heap ist geteilt In mehrere unabhängige Regionen (Regionen) gleicher Größe kann jede Region je nach Bedarf als Eden-Raum, Survivor-Raum oder Raum der alten Generation fungieren. Der Sammler kann unterschiedliche Strategien verwenden, um Regionen mit unterschiedlichen Rollen zu verarbeiten, sodass sowohl neu erstellte Objekte als auch alte Objekte, die über einen bestimmten Zeitraum hinweg überlebt haben und mehrere Sammlungen überlebt haben, gute Sammlungsergebnisse erzielen können.
- Region hat auch eine spezielle Art von HumongousRegion, die speziell zur Lagerung großer Objekte verwendet wird. G1 glaubt, dass ein Objekt als großes Objekt eingestuft werden kann, solange die Größe eines Objekts die Hälfte der Kapazität einer Region überschreitet.
3. Räumliche Integration
- G1 verwendet Region als Grundeinheit beim Recycling von Speicher und verwendet einen Kopieralgorithmus zwischen Regionen, kann aber insgesamt als Markierungskomprimierungsalgorithmus betrachtet werden.
4. Vorhersagbares Pausenzeitmodell
- Der G1-Kollektor kann ein vorhersagbares Pausenzeitmodell erstellen. Er verwendet Region als kleinste Einheit eines einzelnen Recyclings, d Ganzzahliges Vielfaches der Größe, sodass eine vollflächige Garbage Collection des gesamten Java-Heaps planmäßig vermieden werden kann.
- Der G1-Kollektor verfolgt den „Wert“ der Müllansammlung in jeder Region Der Wert ist die für das Recycling gewonnene Fläche und der Erfahrungswert der für das Recycling erforderlichen Zeit und führt dann im Hintergrund eine Prioritätenliste , jedes Mal basierend auf Der Benutzer legt die zulässige Sammlungspausenzeit fest und priorisiert die Regionen mit dem größten Wiederherstellungswert.
- Diese Methode der Verwendung von Region zur Aufteilung des Speicherplatzes und der priorisierten Regionswiederverwendung stellt sicher, dass der G1-Kollektor innerhalb einer begrenzten Zeit die höchstmögliche Sammlungseffizienz erreicht.
- Das Pausenvorhersagemodell wird basierend auf dem Dämpfungsmittel als theoretischer Grundlage implementiert. Während des Garbage Collection-Prozesses zeichnet der G1-Kollektor die Wiederherstellungszeit jeder Region, die Anzahl der schmutzigen Karten im Speichersatz jeder Region und andere messbare Parameter auf Die Kosten der Schritte werden analysiert und statistische Informationen wie Durchschnitt, Standardabweichung und Konfidenzniveau werden ermittelt. Verwenden Sie diese Informationen dann, um vorherzusagen, welche Regionen die Recyclingsammlung bilden werden, wenn das Recycling jetzt beginnt, sodass die höchsten Einnahmen erzielt werden können, ohne die erwartete Pausenzeit zu überschreiten.
Wie löst man die in der Region vorhandenen regionsübergreifenden Referenzobjekte?
Verwenden Sie Speichersätze, um zu vermeiden, dass der gesamte Heap als GC-Roots gescannt wird. Diese Speichersätze zeichnen die Zeiger auf, auf die andere Regionen zeigen, und markieren die Kartenseitenbereiche dieser Zeiger. Der Speichersatz von G1 ist im Wesentlichen eine Hash-Tabelle in Bezug auf die Speicherstruktur. Der Schlüssel ist die Startadresse anderer Regionen, der Wert ist ein Satz und die darin gespeicherten Elemente sind die Indexnummern der Kartentabelle.
Der Betriebsprozess des G1-Kollektors
-
Anfängliche Markierung (Anfängliche Markierung): Markieren Sie einfach die Objekte, mit denen GC Roots direkt verknüpft werden können, und ändern Sie den Wert des TAMS-Zeigers, um die nächste Phase von Benutzer-Threads zu ermöglichen um gleichzeitig ausgeführt zu werden. Neue Objekte können in verfügbaren Regionen korrekt zugeordnet werden. Diese Phase erfordert das Anhalten des Threads, dauert jedoch sehr kurz und wird während des Minor GC synchron abgeschlossen, sodass der G1-Kollektor in dieser Phase tatsächlich keine zusätzlichen Pausen hat.
-
Gleichzeitige Markierung (Gleichzeitige Markierung): Ausgehend von der GC-Wurzel wird die Erreichbarkeitsanalyse der Objekte im Heap durchgeführt und das Objektdiagramm im gesamten Heap rekursiv gescannt, um die zu recycelnden Objekte zu finden dauert lange, kann aber gleichzeitig mit Benutzerprogrammen ausgeführt werden. Nachdem der Objektgraph-Scan abgeschlossen ist, müssen die von SATB aufgezeichneten Objekte, die während der Parallelität Referenzänderungen aufweisen, erneut verarbeitet werden.
-
Endgültige Markierung (Endgültige Markierung): Machen Sie eine weitere kurze Pause im Benutzerthread, um die letzten paar SATB-Datensätze zu verarbeiten, die nach der gleichzeitigen Phase übrig bleiben.
-
Screening und Recycling (Live-Datenzählung und Evakuierung): Verantwortlich für die Aktualisierung der Regionsstatistiken, die Sortierung des Recyclingwerts und der Recyclingkosten für jede Region und die Formulierung eines Recyclingplans basierend auf der vom Benutzer erwarteten Pausenzeit. Sie können frei wählen So viele wie Sie möchten, bildet eine Recycling-Sammlung und kopiert dann die überlebenden Objekte des Teils der Region, der recycelt werden soll, in die leere Region und räumt dann den gesamten Raum der gesamten alten Region auf. Der Vorgang umfasst hier die Bewegung lebender Objekte, die den Benutzer-Thread anhalten und von mehreren Collector-Threads parallel abgeschlossen werden müssen.
7 klassische Müllsammler im Vergleich
Müllsammler-Kombinationen
Low-Latency-Garbage-Collector
Shenandoah-Collector
Shenandoah verwendet auch ein Regions-basiertes Heap-Speicherlayout. Es verfügt auch über Humongous Regions zum Speichern großer Objekte. Die Standard-Recyclingstrategie besteht auch darin, die Regionen mit dem größten Recyclingwert zu priorisieren. Aber in Bezug auf die Verwaltung des Heap-Speichers gibt es mindestens drei offensichtliche Unterschiede zu G1.
- Die Recyclingphase von G1 kann durch mehrere Threads parallelisiert werden, sie kann jedoch nicht gleichzeitig mit Benutzerthreads erfolgen. Shenandoah unterstützt gleichzeitige Sortieralgorithmen.
- Generationssammlung wird standardmäßig nicht verwendet. Mit anderen Worten, es wird keine dedizierte Generationssammlung geben. Dies bedeutet nicht, dass die Generationssammlung keinen Wert für Shenandoah hat Kosteneffektivität, wodurch ihm aufgrund der Arbeitsbelastung eine niedrigere Priorität eingeräumt wird.
- Shenandoah verzichtete auf den Speichersatz, dessen Wartung in G1 viel Speicher und Rechenressourcen verbrauchte, und verwendete stattdessen eine globale Datenstruktur namens „Verbindungsmatrix“, um regionsübergreifende Referenzbeziehungen aufzuzeichnen, wodurch der Speichersatz beim Umgang mit übergreifenden Daten reduziert wurde. Der Wartungsverbrauch verringert auch die Wahrscheinlichkeit von Pseudo-Sharing-Problemen. Die Verbindungsmatrix kann einfach als zweidimensionale Tabelle verstanden werden. Wenn sich in der Region N ein Objekt befindet, das auf die Region M zeigt, wird in den N Zeilen und M Spalten der Tabelle eine Markierung platziert Wird verwendet, um zu bestimmen, welche Regionen Querverbindungen aufweisen.
Der Arbeitsprozess des Shenandoah-Sammlers lässt sich grob in die folgenden neun Phasen einteilen:
-
Anfangsmarkierung: Wie bei G1 werden Objekte, die in direktem Zusammenhang mit GC Roots stehen, zuerst markiert. Diese Phase ist immer noch „Stop The World“. , aber die Pausenzeit hat nichts mit der Heap-Größe zu tun, sondern nur mit der Anzahl der GC-Roots.
-
Gleichzeitiges Markieren: Durchlaufen Sie wie bei G1 den Objektgraphen und markieren Sie alle erreichbaren Objekte. Diese Phase erfolgt gleichzeitig mit dem Benutzerthread. Die Dauer hängt von der Anzahl der überlebenden Objekte im Heap und der strukturellen Komplexität des Objekts ab Grafik.
-
Abschlussnote: Wie bei G1, verarbeiten Sie die verbleibenden SATB-Scans, zählen Sie in dieser Phase die Regionen mit dem höchsten Recyclingwert und bilden Sie aus diesen Regionen eine Reihe von Recyclingsammlungen. Auch während der letzten Bewertungsphase wird es eine kurze Pause geben.
-
Gleichzeitige Bereinigung: Diese Phase wird verwendet, um Regionen zu bereinigen, in denen in der gesamten Region nicht einmal ein einziges überlebendes Objekt gefunden wurde.
-
Gleichzeitiges Recycling: Zu diesem Zeitpunkt kopiert Shenandoah die überlebenden Objekte in der Sammlung in andere ungenutzte Regionen. Wie lange die Ausführung der gleichzeitigen Sammlungsphase dauert, hängt von der Größe der Sammlung ab.
-
Erste Referenzaktualisierung: Nachdem das Objekt in der gleichzeitigen Recyclingphase kopiert wurde, müssen alle Verweise auf die alten Objekte im Heap nach dem Kopieren auf die neuen Adressen korrigiert werden. Dieser Vorgang wird als Referenzaktualisierung bezeichnet. Die Initialisierungsphase der Referenzaktualisierung führt eigentlich keine spezifische Verarbeitung durch. Diese Phase wird nur eingerichtet, um einen Thread-Treffpunkt festzulegen, um sicherzustellen, dass alle Collector-Threads in der gleichzeitigen Recyclingphase die ihnen zugewiesenen Objektverschiebungsaufgaben abgeschlossen haben. Die anfängliche Referenzaktualisierungszeit ist sehr kurz, was zu einer sehr kurzen Pause führt.
-
Gleichzeitige Referenzaktualisierung: Der Referenzaktualisierungsvorgang beginnt tatsächlich gleichzeitig mit dem Benutzerthread. Die Dauer hängt von der Anzahl der im Speicher beteiligten Referenzen ab. Die gleichzeitige Referenzaktualisierung unterscheidet sich von der gleichzeitigen Markierung. Sie muss nicht mehr entlang des Objektdiagramms suchen, sondern nur linear nach dem Referenztyp in der Reihenfolge der physischen Speicheradresse suchen und den alten Wert in den neuen Wert ändern.
-
Endgültige Referenzaktualisierung: Nach der Lösung der Referenzaktualisierung im Heap müssen auch die in GC Roots vorhandenen Referenzen korrigiert werden. Diese Phase ist die letzte Pause von Shenandoah und die Pausenzeit hängt nur von der Anzahl der GC Roots ab.
-
Gleichzeitige Bereinigung: Nach dem gleichzeitigen Recycling und der Referenzaktualisierung verfügen alle Regionen im gesamten Recyclingsatz nicht mehr über lebende Objekte, und diese Regionen sind zu unmittelbaren Müllregionen geworden. Schließlich wird der gleichzeitige Reinigungsprozess erneut aufgerufen, um den Speicher zurückzugewinnen Diese Regionen bieten Platz für die zukünftige Zuordnung neuer Objekte.
ZGC Collector
Die Ziele von ZGC und Shenandoah sind sehr ähnlich. Beide hoffen, die Pausenzeit der Garbage Collection bei jeder Heap-Speichergröße so weit wie möglich zu begrenzen, ohne den Durchsatz zu beeinträchtigen.
Der ZGC-Kollektor basiert auf dem Regionsspeicherlayout (vorübergehend) ohne Generierung. Er verwendet Technologien wie Lesebarrieren, gefärbte Zeiger und Speichermehrfachzuordnung, um gleichzeitige Markierungssortierungsalgorithmen mit geringen Kosten zu implementieren als sein vorrangiges Ziel.
ZGC verwendet ebenfalls ein regionsbasiertes Heap-Speicherlayout, aber im Gegensatz zu diesen ist die Region von ZGC dynamisch – dynamische Erstellung und Zerstörung sowie dynamische Kapazitätsgröße der Region.
Der Betriebsprozess von ZGC kann in vier Phasen unterteilt werden:
-
Gleichzeitige Markierung(: Wie bei G1 und Shenandoah ist die gleichzeitige Markierung eine Phase des Durchlaufens des Objektdiagramms zur Erreichbarkeitsanalyse. Sie durchläuft auch die anfängliche und endgültige Markierung, ähnlich wie bei G1 und Shenandoah (obwohl die Namen in ZGC unterschiedlich sind). . Diese werden als kurze Pausen bezeichnet, und die in diesen Pausenphasen ausgeführten Aktionen sind auf dem Ziel ähnlich. Im Gegensatz zu G1 und Shenandoah erfolgt die Markierung auf dem Zeiger und nicht auf dem Objekt, und die Markierungsphase wird aktualisiert Markierte 1-Flaggen im Färbezeiger
-
Gleichzeitige Vorbereitung für die Neuzuweisung: In dieser Phase müssen anhand spezifischer Abfragebedingungen berechnet werden, welche Regionen in diesem Erfassungsprozess bereinigt werden, und diese Regionen zu einem Neuzuweisungssatz zusammengefügt werden
- Gleichzeitige Neuzuweisung: Die Neuzuweisung ist die Kernphase des ZGC-Ausführungsprozesses. Dieser Prozess umfasst das Kopieren der verbleibenden Objekte im Neuzuweisungssatz in neue Regionen und die Pflege einer Weiterleitungstabelle und eines Datensatzes für jede Region im Neuzuweisungssatz zu neuen Objekten.
Gleichzeitige Neuzuordnung: Die Aufgabe der Neuzuordnung besteht darin, alle Referenzen im gesamten Heap zu korrigieren, die auf die alten Objekte im Neuzuordnungssatz verweisen Gleichzeitige Markierungsphase im nächsten Garbage-Collection-Zyklus. Sie müssen jedoch alle Objekte durchlaufen, sodass durch die Zusammenführung die Kosten für das Durchlaufen des Objektdiagramms eingespart werden, sobald alle Zeiger korrigiert wurden. Die Weiterleitungstabelle der alten und neuen Objektbeziehungen kann freigegeben werden. -
Wählen Sie einen geeigneten Garbage Collector.
Bedenken Sie die folgenden drei Fragen:
Was ist der Schwerpunkt der Anwendung?
Wenn es um Datenanalyse oder wissenschaftliches Rechnen geht. Bei Aufgaben wie dieser besteht das Ziel darin, die Ergebnisse zu berechnen so schnell wie möglich, daher steht der Durchsatz im Mittelpunkt
Wenn es sich um eine SLA-Anwendung handelt, wirkt sich die Pausenzeit direkt auf die Servicequalität aus und kann in schweren Fällen sogar zu einer Transaktionszeitüberschreitung führen, daher steht die Verzögerung im Vordergrund -
Wenn es sich um eine Client-Anwendung oder eine eingebettete Anwendung handelt, kann die Speichernutzung der Garbage Collection nicht ignoriert werden. -
- Was ist die Infrastruktur zum Ausführen der Anwendung?
Die beteiligte Systemarchitektur ist x86-32/64. SPARC oder ARM/Aarch64;
Die Anzahl der Prozessoren und die Größe des zugewiesenen Speichers; - Ob das ausgewählte Betriebssystem Linux, Solaris oder Windows usw. ist.
- Ist es? ZingJDK/Zulu, OracleJDK, Open-JDK oder die Distribution eines anderen Unternehmens? Welcher Version der „Java Virtual Machine Specification“ entspricht dieses JDK? Wie wählt man zuerst den Garbage Collector aus? Wenn der Speicher weniger als 100 MB beträgt, verwenden Sie den seriellen Kollektor.
- Wenn es sich um ein eigenständiges Single-Core-Programm handelt und keine Pausenzeit erforderlich ist, ist der serielle Kollektor erforderlich Durchsatz, erlauben Sie eine Pausenzeit von mehr als 1 Sekunde, wählen Sie Parallel oder JVM.
Wenn Sie über mehrere CPUs verfügen, eine kurze Pausenzeit anstreben und schnell reagieren müssen (z. B. darf die Verzögerung bei Internetanwendungen 1 Sekunde nicht überschreiten), verwenden Sie a gleichzeitiger Sammler
Empfohlene Studie: „
Java-Video-Tutorial
“
Das obige ist der detaillierte Inhalt vonEine detaillierte Einführung in die Java Virtual Machine: JVM Garbage Collector. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!