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.
Malware SmokeLoader wird weiterhin von Bedrohungsakteuren genutzt, um Payloads über neue C2-Infrastrukturen zu verbreiten.
Bankhaus Metzler und Telekom-Tochter MMS testen, inwieweit Bitcoin-Miner das deutsche Stromnetz stabilisieren könnten.
Mit 1,7 Exaflops ist El Capitan nun der dritte Exascale-Supercomputer weltweit. Deutschland stellt erneut den…
Der deutsche Hyperscaler erweitert sein Server-Portfolio um vier Angebote mit den neuen AMD EPYC 4004…
Beim Online-Gaming kommt es nicht nur auf das eigene Können an. Auch die technischen Voraussetzungen…
Fast jedes zweite Unternehmen bietet keinerlei Schulungen an. In den übrigen Betrieben profitieren oft nur…