Garbage collection

Posted on 9th August 2007 in Programmieren allgemein

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.

comments: 4 »

4 Responses to “Garbage collection”

  1. Michael sagt:

    > 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:

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

    mfg Klajo ;)

  3. Jo sagt:

    “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:

    @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



Pings responses to this post

Hinterlasse eine Antwort

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind markiert *

*

Comment

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>