Die grundlegenden Beobachtungen, mit denen die Sammlung von Speicherbereinigungen für Generationen vermieden werden kann, dass alle Objekte älterer Generationen gescannt werden müssen, sind:
- Nach einer Sammlung werden alle Objekte, die noch existieren, von einer minimalen Generation sein (z. B. in .net, nach einer Sammlung von Gen0 sind alle Objekte Gen1 oder Gen2; nach einer Sammlung von Gen1 oder Gen2 sind alle Objekte Gen2).
- Ein Objekt oder ein Teil davon, das seit einer Sammlung, die alles auf Generation N oder höher hochgestuft hat, nicht mehr geschrieben wurde, darf keine Verweise auf Objekte niedrigerer Generationen enthalten.
- Wenn ein Objekt eine bestimmte Generation erreicht hat, muss es nicht als erreichbar identifiziert werden, um seine Beibehaltung beim Sammeln niedrigerer Generationen sicherzustellen.
In vielen GC-Frameworks ist es dem Garbage Collector möglich, Objekte oder Teile davon so zu kennzeichnen, dass der erste Versuch, darauf zu schreiben, einen speziellen Code auslöst, der die Tatsache aufzeichnet, dass sie geändert wurden. Ein Objekt oder ein Teil davon, das unabhängig von seiner Erzeugung geändert wurde, muss in der nächsten Sammlung gescannt werden, da es Verweise auf neuere Objekte enthalten kann. Andererseits ist es sehr häufig, dass es viele ältere Objekte gibt, die zwischen den Sammlungen nicht geändert werden. Die Tatsache, dass Scans niedrigerer Generationen solche Objekte ignorieren können, kann dazu führen, dass solche Scans viel schneller ausgeführt werden, als dies sonst der Fall wäre.
Man beachte übrigens, dass selbst wenn man nicht erkennen kann, wann Objekte geändert wurden und bei jedem GC-Durchgang alles gescannt werden müsste, die generationsbedingte Speicherbereinigung die Leistung eines Kompaktierungskollektors im Sweep-Stadium verbessern könnte. In einigen eingebetteten Umgebungen (insbesondere in solchen, in denen die Geschwindigkeit zwischen sequentiellen und zufälligen Speicherzugriffen kaum oder gar nicht unterschiedlich ist) ist das Verschieben von Speicherblöcken im Vergleich zum Markieren von Referenzen relativ teuer. Selbst wenn die "Mark" -Phase mit einem Generationskollektor nicht beschleunigt werden kann, kann es sich daher lohnen, die "Sweep" -Phase zu beschleunigen.