Garbage collection
Ich bin auf ein Thema gestossen, welches ich euch nicht vorenthalten will, da ich finde es ist wirklich nice 2 know.
Es geht um die Müllabfuhr (in der Programmierung). Wenn man von dieser spricht, dann spricht man von Garbage collection (GC). Es ist ein Verfahren, welches automatisch wieder Speicherplatz freigibt, der nicht mehr genutzt wird.
Garbage collection wird in der objektorientierten Programmierung eingesetzt (ABAP, C++, Java, …). Dort werden lauter Objekte erstellt, für die Speicherplatz reserviert wird.
Auf diese Objekte wird über Variabeln zugegriffen, die auf die Objekte zeigen. Also sind die Variabeln Zeiger.

In der Grafik sind die Variabeln die gelben Vierecke. Und die blauen Kreise mit den Augen stellen die Objekte dar. Garbage collection lässt die Objekte am leben, solange irgend ein Zeiger auf sie zeigt. Verweisen mal keine Zeiger auf ein Objekt, so wird der reservierte Speicher freigegeben. Wie das untere Bild zeigt. Nach dam die Variabeln 1 und 2 gelöscht wurden und somit nichts auf das Objekt1 verweist, wird dessen reservierter Speicher freigegeben.

Fragmentierung
So nützlich das Garbage collection-Verfahren auch ist, heisst es nicht, dass es perfekt ist. Mit der Zeit kann (beim klassischen Garbage collection) eine leichte Fragmentierung entstehen. Wenn z.B. ein Objekt gelöscht wird, das einen minimalen Speicherbereich beansprucht, so steht nach dem freigeben des noch genutzten Speicher eine kleine freie Lücke Speicherplatz. Das Problem nun ist, wenn jetzt neue grössere Objekte einen Speicherbereich reservieren wollen, dann nehmen sie nicht die kleine Lücke, da sie ja als grössere Objekte einen grösseren Speicher reservieren wollen. So kann es sein, dass wenn viele Lücken in der Laufzeit entsethen, ein Stück Speicher einfach nicht genutzt wird.

Das obige Bild zeigt ein Beispiel einer Fragmentierung. Die kleine freie Lücke kann nicht von einem grösseren Objekt verwendet werden.







am 17. Aug. 2007
> Garbage collection wird in der objektorientierten Programmierung eingesetzt > (ABAP, C, Java, …).
Seit wann ist C denn eine objektorientierte Programmiersprache?
Du hast glaub ich ++ oder # vergessen.
Ansonsten schon und einfach (anschaulich) erklärt! GC for Dummys
am 17. Aug. 2007
Hi, Danke für dein Kommentar.
Ja hab ich nicht bemerkt :D, danke wurde auf c++ korrigiert.
mfg Klajo
am 5. Okt. 2007
“Garbage collection wird in der objektorientierten Programmierung eingesetzt…”
Seit wann hat denn objektorientierte Programmierung etwas mit garbage collection zu tun? Dein angeführtes Beispiel mit C++ ist in sofern falsch, als dass C++ keinen GC enthält. Sonst müsste man ja für ein Object ja auch nicht new & delete verwenden…
am 14. Okt. 2007
@Jo
“Seit wann hat denn objektorientierte Programmierung etwas mit garbage collection zu tun?”
Seit es nicht mehr verwendete Objekte löscht, die es nun halt in der OOP gibt.
Gruss
Klajo