Effektive Speicherverwaltung mit Javas Referenzobjekten

Ganz gleich, welchen Java-Programmierer man nach den vier besten Eigenschaften der Java-Sprache fragt: Die Antwort wird wohl immer etwas mit automatischer Speicherbereinigung (Garbage Collection) zu tun haben.

Garbage Collection ist der von Java benutzte Prozess zur Feststellung nicht mehr benötigter Objekte und der anschließenden Wiederfreigabe des durch diese Objekte belegten Speichers. Javas Garbage Collection eliminiert eine Reihe potenzieller mit Speichermanagement verbundener Bugs, die gleichzeitig gravierend und schwer zu debuggen sind. Ein Zugriff auf bereits freigegebene Objekte oder die versäumte Freigabe von nicht mehr benötigten Objekten sind einfach keine Dinge, um die sich Java-Programmierer Sorgen machen müssen.

Der Nachteil ist jedoch, dass die automatische Garbage Collection den Programmierer in seiner Freiheit etwas einschränkt, da man nicht wissen kann, wann der Garbage Collector über ein bestimmtes Objekt verfügt. Außerdem hat man keine Möglichkeit, das Speichermanagement zu steuern. Mit Java 1.2 wurde ein neuer Objekttyp, das Referenzobjekt, eingeführt um einen Ausweg aus diesen Einschränkungen zu bieten. Bevor diese Referenzobjekte besprochen werden, hier ein paar Details über Javas Garbage Collection.

Garbage Collection in Java

In einfachen Worten ausgedrückt ist Garbage Collection die Freisetzung von Speicher, der nicht mehr von einer Anwendung benutzt wird – man kann es auch Abfallbeseitigung nennen. In Java ist der Garbage Collector für diesen Vorgang zuständig. Er betrachtet Objekte als Abfall, wenn sie nicht länger von einer Anwendung genutzt werden.

Wie fällt der Garbage Collector diese Entscheidung? Streng gesagt sind all solche Objekte nicht genutzt, auf die durch einen aktiven Thread weder direkt noch indirekt zugegriffen werden kann. Alle dieser Objekte können vom Garbage Collector aufgesammelt und ihr Speicherplatz zurückgefordert und wieder freigegeben werden.

Wie und wann der Garbage Collector ausgeführt wird, hängt von dessen Implementierung ab. Es gibt eine Reihe akzeptierter Bereinigungsstrategien und die Java-Spezifikation überlässt die Wahl der Strategie jeder einzelnen JVM-Implementierung. Die einzige Garantie ist, dass vor der endgültigen Freigabe des durch ein Objekt belegten Speicherplatzes die finalize-Methode des Objekts aufgerufen werden muss. Diese wird vom Objekt geerbt, es sei denn, eine eigene Methode wird definiert. Hierdurch bleibt dem Objekt die Möglichkeit, etwaige noch erforderliche Säuberungsaktionen vorzunehmen.

Eine formelle und ausführliche Beschreibung der Garbage Collection in Java ist in Abschnitt 12.6 der Java-Spezifikation zu finden.

Themenseiten: Anwendungsentwicklung, Software

Fanden Sie diesen Artikel nützlich?
Content Loading ...
Whitepaper

Artikel empfehlen:

Neueste Kommentare 

Noch keine Kommentare zu Effektive Speicherverwaltung mit Javas Referenzobjekten

Kommentar hinzufügen

Schreibe einen Kommentar

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