Hallo,
On Wednesday, 27. March 2002 11:35, Jens Puruckherr wrote:
Vielleicht in die Richtung: Wenn ich ein Objekt nicht mehr brauche, wird es destruktiert um den Speicherplatz wieder freizugeben (oder wozu sonst?) und es landet im Garbage Kollektor. Was landet da dort drinne? Das Objekt? dann habe ich ja keinen Speicheplatz freigegeben. Was also? Und warum?
Im Garbage Collector landet nichts. Der GC ist sozusagen eine Routine in der Laufzeitumgebung (z.B. JVM, CIL/mint bei mono). Der GC ist dafür zuständig, nicht mehr benötigen Speicher freizugeben. Inwiefern der das kann, das ist der Knackpunkt. Es gibt:
- konservative GC's. Ein Beispiel ist der Boem GC, der z.B. in der gcc 3.x eingesetzt wird (gcj). Dabei wird der Speicher "abgesucht", und alles was verdächtig nach benutztem Pointer aussieht wird lieber in Ruhe gelassen. Dabei wird aber eher mehr stehen gelassen als sein muß (-> mehr Speicherbedarf).
- präzise GC's. Dabei sind die Möglichkeiten zur Speicherallokierung stark mit dem GC verknüpft, so daß man immer weiß was man entfernen darf (IIRC).
- inkrementelle GC's. Das ist was ganz witziges, dabei werden alle Speicherbereiche auf die häufiger/langfristiger zugegriffen wird nach hinten in eine Queue geschoben, und vorne bleibt das stehen wo es sich eher mal lohnt was wegzulöschen. Also ein Scheduling-Verfahren. Zusammen mit einem inkrementellen JITer recht interessant.
So, das war mein gesamtes Halbwissen zum Thema, partiell aufgewertet durch einen de Icaza-Vortrag, der über den Ximian-Partner Intel Einblick in deren GC hatte :-)
Josef Spillner