Parrot bietet eine automatische Speicherverwaltung. Das heißt, der Programmierer kann sich dynamischen Speicher einfach und schnell allozieren. Wenn der angeforderte Speicher nicht mehr benötigt wird, wird er von Parrot automatisch freigegeben.
Der Vorgang der automatischen Speicherverwaltung wird Garbage-Collection genannt. Um dies zu vereinfachen und performant zu realisieren wird der Speicher in Parrot in 2 Typen unterteilt.
Die einfachen Strukturtypen haben eine feste Größe. Dies sind primitive Datentypen und der Aufbau der sogeannten Parrot Magic Cookies.
Diese werden in dynamischen Pools verwaltet. Wird ein Speicherobjekt benötigt, wird dies einfach aus dem Pool entnommen und wieder in den Pool zurückgegeben wenn es nicht mehr benötigt wird.
Speicher mit einer variablen Länge wird gesondert verwaltet. Die benötigten Verfahren zur Verwaltung sind komplexer und nehmen mehr Laufzeit in Anspruch.
Es gibt mehrere Algorithmen um die Garbage-Collection umzusetzen. Die übliche Referenzzählung wurde als zu unperformant angesehen, da bei jeder Operation mit einer Referenz ein Zähler aktualisiert werden muss. Außerdem muß man Sonderfälle wie zyklische Referenzierung gesondert behandeln.
Parrot verwendet in der aktuellen Version den Mark-and-Compact-Algorithmus. Dabei werden dii Referenzen von bekanntermaßen noch benutzen Speicherobjekten auf andere Objekte gefolgt und als noch-benutzt markiert. Alle nicht erreichten Speicherobjekte werden daraufhin zur Wiederverwendung freigegeben. Anschließend werden alle benutzten Speicherobjekte zu einem Block zusammengeschoben und der Freispeicher somit defragmentiert.
Der Vorteil dieses Verfahrens ist, dass neuer Speicher schnell alloziert werden kann. Der Speichermanager muß nicht lange nach einem Speicherblock suchen muss welches groß genug ist.
Erstellt von Johannes Barop