Lade...
 

CX_GARBAGE_MANAGER::GarbageColl

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
Stack Position Objekttyp Kurzbeschreibung
Stack(In) Top CX_GARBAGE_MANAGER Garbage-Manager-Objekt
Funktionsaufruf: Call(GarbageColl)