CX_GARBAGE_MANAGER::GarbageColl
Beschreibung:
Startet einen Garbage-Collection-Prozess, der nicht mehr genutzte Speicherbereiche zurückgewinnt.
Für elementare Datentypen (ganze Zahlen, Zeichenketten, multiple Zeichenketten, ...) geschieht dies automatisch; es gibt keinen Grund, diesen Vorgang überhaupt zur Kenntnis zu nehmen. Aber auch der Speicher, den ein transientes Objekt X einst belegt hat, soll freigegeben werden. Der Garbage-Collection-Algorithmus kann (noch) nicht feststellen, ob X von einem weiteren (transienten) Objekt Y referenziert wird. Solange X und Y auf dem Stack liegen oder Variablen zugewiesen sind, ist alles gut. Wird dann nur X frei, enthält Y nach der nächsten Garbage-Collection eine Referenz auf ein nicht existentes Objekt. Dies zu verhindern gibt es zwei Möglichkeiten:
- dafür sorgen, dass das referenzierte Objekt X in einer Variablen gehalten wird (solange Y existiert)
- X explizit von der Garbage-Collection ausschließen (siehe CreateTransObject(,KEEP)). Dies sorgt jedoch dafür, dass das Objekt nie von der GarbageCollection freigegeben wird und der Speicher so lange belegt bleibt, bis der ClassiX-Prozess beendet wird. Ein transientes Objekt kann manuell per DeleteObject gelöscht werden, davon wird jedoch abgeraten, weil man nicht prüfen kann, ob das Objekt noch referenziert wird.
Code-Beispiel:
GetManager(GARBAGE) Call(GarbageColl)
Stack | Position | Objekttyp | Kurzbeschreibung |
---|---|---|---|
Stack(In) | Top | CX_GARBAGE_MANAGER | Garbage-Manager-Objekt |