Frage

Wie funktioniert ein Kopieren Garbage Collector vermeiden Speicherfragmentierung? Auch, was Folgen für die Heap-Raumnutzung?

Von meinem Verständnis, ein Kopieren Garbage Collector, kopiert alle erreichbaren Objekte aus dem Heap in einer anderen Abschnitt des Haufens. Alle Objekte, die zurückgelassen werden nicht mehr benötigt und somit entfernt wurden.

Wenn dies ein korrektes Verständnis, wie funktioniert dies zu vermeiden Speicherfragmentierung?

Dieser Prozess viel Heap-Raum verwenden müssen, weil es Duplikate aller Elemente haben es kopiert, nicht wahr?

War es hilfreich?

Lösung

Wenn dies ein korrektes Verständnis, wie funktioniert dies zu vermeiden Speicherfragmentierung?

Weil, wenn Sie die Objekte auf die „neue Halde“ kopieren, können Sie sie halten direkt nebeneinander, ohne Lücken zu verlassen.

Dieser Prozess viel Heap-Raum verwenden müssen, weil es Duplikate aller Elemente haben es kopiert, nicht wahr?

Nur während des Sammelprozesses. Nachdem Sie das getan haben, werden alle „Originale“ sind freigegeben und dass der Raum wieder frei.

Zusätzlich Müllsammler wie diese sind oft „Generationen“ - Kopieren Garbage Collection verwendet wird, auf kurzlebige Objekten, mit langlebigen Objekten unterschiedlich behandelt werden. Dies trägt dazu bei, den Raum Problem zu erleichtern, sowie Herstellung Sammlungen weniger Zeit in Anspruch nehmen.

Andere Tipps

Ihr grundlegendes Verständnis ist richtig. Es vermeidet die Fragmentierung, weil, wie es kopiert die erreichbaren Objekten kann es in der Nähe zusammen dann, den freien Speicherplatz in einem Block zu verlassen. es hat viel Platz benötigen, in der Tat, es erfordert möglicherweise 2x den Raum und einige Veränderungen für die Buchhaltung.

Speicherfragmentierung tritt auf, wenn Speicherblöcke zwischen zwei aktiven Brocken ausgeplant werden. Denken Sie an einen Speicherblock wie so ...

AAAAAAAAAAAAAAAABBBBCCCCCCCCCCCC

Es sei angenommen, dass B nicht mehr benötigt wird. Wenn wir den Platz freigeben, dass B wurde mit mit uns so etwas wie ...

AAAAAAAAAAAAAAAA----CCCCCCCCCCC

Jetzt haben wir eine Lücke, dass wir nur eher kleine Objekte setzen können. Ein Kopieren von Garbage Collector kann Dinge bewegen, so dass wir ...

AAAAAAAAAAAAAAAACCCCCCCCCCC---- (more free space here)

Die meisten modernen Kollektoren können Dinge an Ort und Stelle bewegen. Das heißt, können Sie sehen, wie C sein könnte „verschoben“ B alten Platz einnehmen und somit gibt es keine Speicher-Overhead.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top