Jeder Java-Prozess, den ich auf meinem Rechner starte, scheint standardmäßig 2 Müllsammler zu haben. Ich überprüfe das über JConsole.Mehrere Müllsammler in Java
Beispiel - für meine derzeit laufende Eclipse.
PS MarkSweep
Collection Count - 221
Collection Time - 102118
Memory Pool Names - java.lang.String[4]
PS Scavenge
Collection Count - 241
Collection Time - 2428
Memory Pool Names - java.lang.String[2]
Ich gehe davon aus sie überlappende Pools haben. Wie arbeiten zwei Müllsammler zusammen, wenn sie dieselben Pools benutzen (Eden, Überlebender, alte Generation)? Gibt es keine Überlappung in der Bewegung von Objekten zwischen Pools (Wie Bewegung von 1 Überlebenden zu einem anderen, wenn der zweite Algorithmus aufgerufen wird)? Auch wenn es nicht so ist, warum brauchen wir mehr als einen Sammler pro Pool?
Ich habe this article on GC gelesen. Sie beziehen sich auf die Verwendung unterschiedlicher Kollektoren für verschiedene Haupt- und Neben-GC, aber es scheint keine Bezugnahme auf die Verwendung mehrerer Kollektoren auf demselben Pool zu geben.
Was ist so seltsam, verschiedene Sammler für verschiedene Generationen zu haben? – Mikhail
Ich kann verschiedene Sammler für verschiedene Generationen verstehen, aber es scheint hier wie es mehrere Sammler für die gleichen Generationen gibt. Wie funktioniert das? –
Wichtige Sammlungen reinigen alle Heap, nicht nur ältere Generation. – Mikhail