logo

Programmieren oder so ähnlich


Garbage collection

Posted in Programmieren allgemein von admin am 9. Aug. 2007

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.

Gargabe collection 1 - klajo.com

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.

Garbage collection 2 - klajo.com

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.

Garbage collection 3 - klajo.com

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

4 Kommentare zu 'Garbage collection'

Kommentare als RSS oder TrackBack von 'Garbage collection'.

  1. Michael sagt,

    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 ;)

  2. admin sagt,

    am 17. Aug. 2007

    Hi, Danke für dein Kommentar.
    Ja hab ich nicht bemerkt :D, danke wurde auf c++ korrigiert.

    mfg Klajo ;)

  3. Jo sagt,

    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…

  4. admin sagt,

    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

Kommentar hinterlassen:


Blogverzeichnis - Blog Verzeichnis bloggerei.de blog-o-rama.deSuchmaschinenoptimierung mit Ranking-Hits supported by www.rankingcloud.de Blog Top Liste - by TopBlogs.de Free Games

Add to Technorati Favorites Sofortkredit ohne Schufa