ähnlich Copying Algorithmen: Semispaces sind in diesem
Falle zwei Mengen (doppelt verkettete Listen)
alle Heapobjekte werden um zwei Pointer und ein Farbfeld
erweitert, wobei die Pointer zum Einlinken in eine Menge genutzt werden
und das Farbfeld die Menge bezeichnet, zu der das Objekt gehört
sobald die Freispeicherliste verbraucht ist, findet die Garbage
Collection statt
alle lebendigen Objekte werden von der Menge der belegten
Speicherbereiche (fromset) in die andere Menge (toset) verschoben (das
geschieht, indem das Objekt über seine 2 zusätzlichen Pointer
in die andere Liste gelinkt wird und das Farbfeld getoggled wird)
nach Beendigung enthält die alte Menge (fromset) nur
noch Garbage und kann somit als Menge von freien Speicherbereichen deklariert
werden
Vorteile gegenüber Copying:
Objekte ansich müssen nicht kopiert werden (demzufolge
müssen auch keine Referenzen aktualisiert werden)
Semispaces schränken den nutzbaren Heapspeicher kaum
ein
Probleme:
Heap Fragmentierung
Informationen über die Mengen und Mengenzugehörigkeiten
belegen zusätzlichen Speicher