Garbage Collections müssen alle Objekte besuchen, die noch leben, um den Speicher zu finden, der wiederhergestellt werden kann. (Mit vielen Generationen verzögert sich das nur ein bisschen)
Wenn alle Dinge gleich sind, ist es eindeutig besser, zuerst das Objekt zu besuchen, das bereits in den RAM ausgelagert ist, bevor ein anderer Block eingelagert und daher ein Objekt ausgelagert wird.
Eine weitere Möglichkeit besteht darin, dass, wenn das Betriebssystem eine Seite RAM aus dem Prozess entfernen möchte, der GC zuerst gefragt wird, ob eine Seite vorhanden ist, die aufgegeben werden kann, ohne dass sie ausgelagert werden muss. Der GC kann meistens mit dem Verschieben von Objekten von einer Seite durchgeführt werden, sodass diese Seite innerhalb des Zeitlimits gelöscht werden kann, innerhalb dessen das Betriebssystem eine Seite benötigt.
Ich kann mich jedoch nicht an einen Garbage Collector erinnern, der in das Betriebssystem-Paging-System integriert ist und die Reihenfolge bestimmt, in der der GC arbeitet.
quelle
Antworten:
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 .
quelle
Emery Berger, Matthew Hertz und Yi Feng haben daran gearbeitet.
Dies ist ein Video von Emerys Vortrag darüber, und er schrieb eine Zeitung Garbage Collection Without Paging
Aus einigen Gründen scheint es nicht viel spätere Arbeiten zu geben oder eine Verwendung in der „realen Welt“. Am Ende des Artikels heißt es: „Wir entwickeln eine parallele Variante des Algorithmus für die Erfassung von Lesezeichen“ , aber ich kann sie nicht aufspüren.
CRAMM: Die Unterstützung des virtuellen Speichers für Garbage-Collected-Anwendungen versucht, das Betriebssystem so zu ändern, dass GC weniger Paging erstellt.
Verwenden von Page Residency, um die Kompromisse bei der Verfolgung der Garbage Collection auszugleichen
quelle