Wie ich mich erinnere, sollten Kopiersammler paging-freundlich sein, da das Verfolgen durch Kopieren dazu neigt, die Lokalität von Zeigerreferenzen zu verbessern. Dies wirkt sich positiv auf das Programm (Mutator) aus, das beim Verfolgen von Links weniger Seitenfehler verursacht und auch den nächsten Erfassungszyklus verbessert, da die Ablaufverfolgung auch weniger Seitenfehler verursacht. Die Ablaufverfolgungsagenda (welche Zeiger zuerst verarbeitet werden sollten) kann sich auf die Wirksamkeit zur Verbesserung der Datenlokalität auswirken. Dies kann verbessert werden, indem Statistiken über die Anzahl der Zugriffe auf verschiedene Zeiger in verschiedenen Zelltypen erstellt werden.
Wenn Sie nun generell einen Tracing-Collector in Betracht ziehen, müssen Sie normalerweise eine Struktur pflegen, die die noch nicht verfolgten Zeiger verfolgt. Es kann möglich sein, diese Struktur so zu organisieren, dass alle auf dieselbe Seite zeigenden Wartezeiger zusammengehalten werden (obwohl dies in einigen Fällen mehr Platz in Anspruch nimmt, abhängig von den verfügbaren Techniken, um die Liste solcher Zeiger zu führen). Eine mögliche Richtlinie besteht darin, immer zuerst den größten Satz von Wartezeigern zu verfolgen, die auf dieselbe Seite zeigen, wenn kein Wartezeiger mehr auf die Seiten im Speicher vorhanden ist.
In Bezug auf die Frage im dritten Absatz, die hinzugefügt wurde, nachdem ich geantwortet habe, ist das Sammeln von Kopien erneut eine Antwort. Das Betriebssystem kann die Anzahl der zugewiesenen physischen Seiten zur Erfassungszeit reduzieren, da die Seiten vollständig freigegeben werden. Bei einem Mark-and-Sweep-Sammler ist das Ereignis, dass eine ganze Seite frei ist, wahrscheinlich viel seltener und daher keinen bestimmten zu berücksichtigenden Mechanismus wert.
Diese Art von Ideen ist natürlich und wird wahrscheinlich in einigen Veröffentlichungen beschrieben. Aber ich kann mich nicht sofort daran erinnern. Ich denke, die frühen Veröffentlichungen zu Lisp GC enthalten einige dieser Ideen (z. B .: Sollte zuerst Auto oder CDR befolgt werden?).
Die gute Nachricht bei dieser Rolle der Kopiersammlung ist auch, dass das Paging die Kopiersammlung erleichtert, da der verfügbare Speicherplatz vergrößert wird. Erinnern Sie sich daran, dass der Kopiersammler im Prinzip doppelt so viel Speicherplatz benötigt wie für die eigentliche Datenspeicherung. Die Auswirkung von Paging hängt nun auch vom Adressraum des Computers und dem verfügbaren physischen Speicher ab. In älteren Computern war der physische Speicher viel kleiner als der verfügbare Adressraum, so dass Paging wirklich ein Platzbonus war, der Richtlinien wie das Kopieren von GCs ermöglichte. Selbst wenn der physische Raum so groß ist wie der Adressraum, kann es sinnvoll sein, ihn gemeinsam zu nutzen, damit der Prozess, der einen GC verwendet, ohne Paging weniger Adressraum hat (siehe Paging)). Diese Ausführungen werden durch den Einsatz von Generationssammlern etwas überholt. In der Regel nutzen sie das Sammeln von Kopien gerade wegen dieser Eigenschaften für die junge Generation, und weil die junge Generation meist nur von kurzer Dauer ist.
Dann haben Sie alle Interaktionen von Generations-GC mit dem Cache-System, die in einer vorherigen Frage behandelt wurden: Sind Generations-Garbage-Collectors von Natur aus Cache-freundlich?
Für weitere Informationen zu diesem Thema würde ich das Web beispielsweise mit den Stichwörtern Garbage Collection und Locality durchsuchen .