Nach langem Suchen habe ich die beste Erklärung auf der Java Performance Tuning-Website in Frage des Monats gefunden: 1.4.1 Garbage Collection-Algorithmen, 29. Januar 2003
Garbage Collection-Algorithmen der jungen Generation
Der (Original-) Kopiersammler (standardmäßig aktiviert). Wenn dieser Kollektor aktiviert wird, werden alle Anwendungsthreads gestoppt und das Kopieren wird mit einem Thread fortgesetzt (was bedeutet, dass nur eine CPU vorhanden ist, selbst wenn auf einem Computer mit mehreren CPUs). Dies wird als Stop-the-World-Sammlung bezeichnet, da die JVM im Grunde alles andere pausiert, bis die Sammlung abgeschlossen ist.
Der Kollektor für paralleles Kopieren (Aktiviert mit -XX: + UseParNewGC). Wie der ursprüngliche Kopiersammler ist auch dieser ein Stop-the-World-Sammler. Dieser Kollektor parallelisiert jedoch die Kopiersammlung über mehrere Threads, was effizienter ist als der ursprüngliche Single-Thread-Kopierkollektor für Computer mit mehreren CPUs (jedoch nicht für Computer mit einer CPU). Dieser Algorithmus beschleunigt möglicherweise die Sammlung junger Generationen um einen Faktor, der der Anzahl der verfügbaren CPUs im Vergleich zum ursprünglichen Kopierkollektor mit einem Thread entspricht.
Der Parallel Scavenge Collector (Aktiviert mit -XX: UseParallelGC). Dies ist wie beim vorherigen Parallelkopierkollektor, aber der Algorithmus ist auf Gigabyte-Heaps (über 10 GB) auf Computern mit mehreren CPUs abgestimmt. Dieser Erfassungsalgorithmus wurde entwickelt, um den Durchsatz zu maximieren und Pausen zu minimieren. Es verfügt über eine optionale adaptive Optimierungsrichtlinie, mit der die Größe von Heapspeichern automatisch geändert wird. Wenn Sie diesen Kollektor verwenden, können Sie nur den ursprünglichen Mark-Sweep-Kollektor der alten Generation verwenden (dh der neuere gleichzeitige Kollektor der alten Generation kann nicht mit diesem Kollektor der jungen Generation arbeiten).
Aus diesen Informationen geht hervor, dass der Hauptunterschied (abgesehen von der CMS-Zusammenarbeit) darin besteht, dass UseParallelGC die Ergonomie unterstützt, UseParNewGC jedoch nicht.