Einige Sprachen, zum Beispiel Java, führten eine Low-Pause-GC ein.
Diese GC können den größten Teil der Arbeit erledigen, ohne die ganze Welt anzuhalten. Dies ist offensichtlich ein ziemlich schwieriges Problem, da es erforderlich ist, den Speicher zu analysieren, wenn der Thread geändert wird. Dies führt dazu, dass Daten zu Beginn des Prozesses verwendet werden können und nicht mehr, wenn der Vorgang abgeschlossen ist, oder Daten, bei denen es sich anscheinend um Müll handelt Die Referenz wurde in den Speicher verschoben und ist nie dort erschienen, wo der GC gesucht hat.
Was steckt also im Grunde dahinter?
Forschungsarbeiten oder der Link zu einem wirklich technischen Artikel gelten als gültige Antwort, da dieses Thema wirklich technisch ist.
quelle
Der Grund dafür ist, dass in Java nur der GC Speicher freigeben kann, der möglicherweise GC-Referenzen enthält. Das heißt, solange Sie Objekte in einem separaten Thread sicher lesen können, müssten Sie das Programm nur anhalten, um die Referenzen auf dem Stapel zu beobachten.
Ich würde für Mutationen vorschlagen, dass sie eine Art Copy-on-Write implementieren, um den GC über die Änderung zu informieren.
quelle