Effektive Speicherverwaltung mit Javas Referenzobjekten

Das Ergebnis dieses Beispiels ist leicht vorhersagbar: Auf dem Testrechner ging dem Programm nach ungefähr neun Blöcken der Speicher aus, wie man in Abbildung A sehen kann.


Abbildung A: Auf dem Testrechner geht diesem Beispiel der Speicher aus. (Abbildung vergrößern)

Wichtig in Abbildung A ist, dass der Garbage Collector die MemoryBlocks nicht zurückfordern konnte um den von ihnen belegten Speicherplatz wieder freizugeben, da sie in einer ArrayList gespeichert waren. Aus diesem Grund sind auch keine Mitteilungen vorhanden, aus denen ersichtlich wäre, dass MemoryBlock.finalize aufgerufen worden sei.

Und nun ein Blick auf Listing C. Hier sind die MemoryBlocks in der ArrayList über Instanzen der MyReference-Klasse gespeichert, die in Listing D zu finden ist. MyReference erweitert SoftReference und setzt die toString-Methode außer Kraft, um eine String-Darstellung des Objekts zurückzugeben, auf das die Klasse eine schwache Referenz hält.

Abbildung B zeigt die Ausgabe des abgeänderten Beispiels. Dem Programm geht nach ungefähr der gleichen Anzahl von Iterationen der Speicher aus, da aber nur Referenzen über die Referenzobjekte zu den MemoryBlocks bestehen, können sie mit dem Garbage Collector zurückgefordert werden, wenn der Speicher knapp wird.


Abbildung B: Der Speicher wird noch immer knapp, aber die Garbage Collection ist klar zu erkennen. (Abbildung vergrößern)

Wie man aus den wiederholten finalize-Meldungen erkennen kann, sind alte Blöcke freigegeben, während neue erstellt werden. Die Referenzobjekte, die sich auf die erledigten MemoryBlocks beziehen, werden auch gelöscht. Aus diesem Grund werden ihre entsprechenden Positionen auf der ArrayList als null ausgedruckt. Man sieht, dass die MyReference-Instanzen noch immer existieren, nur verweisen sie nicht mehr auf die MemoryBlocks, da diese bereits entsorgt wurden.

Ein viel höheres Maß an KontrolleWie man sieht, bieten Referenzobjekte eine wesentlich bessere Kontrolle über den Speicherbereinigungsprozess. Bei ihrer Anwendung genießt man trotzdem die Vorzüge der automatischen Speicherbereinigung, insbesondere deren einfache Anwendung und Sicherheit.

Page: 1 2 3

ZDNet.de Redaktion

Recent Posts

HostPress für Agenturen und E-Commerce-Betreiber

Höchste Performance-Standards für Webseiten und ein persönlicher, kundenorientierter Premium Support.

6 Tagen ago

V-NAND: Samsung steigert Bit-Dichte um 50 Prozent

Die neue V-NAND-Generation bietet die derzeit höchste verfügbare Bit-Dichte. Samsung steigert auch die Geschwindigkeit und…

6 Tagen ago

Bericht: Google entwickelt App-Quarantäne für Android

Die Sicherheitsfunktion taucht in einer Beta eines kommenden Android-Updates auf. Die Quarantäne beendet unter anderem…

7 Tagen ago

Kostenloser Kurs zum Ausbau von Low-Code-Programmierung

Die OutSystems Developer School hilft Entwicklern, in 2 Wochen komplexe reaktive Anwendungen mit der Low-Code-Plattform…

7 Tagen ago

Cloudflare: DNS-basierte DDoS-Angriffe steigen im ersten Quartal um 80 Prozent

Das Jahr 2024 beginnt laut Cloudflare mit einem Paukenschlag. Die automatischen Systeme des Unternehmens wehren…

7 Tagen ago

Roblox: 34 Millionen Zugangsdaten im Darknet

Laut Kaspersky nehmen Infostealer gerade auch Spieleplattformen ins Visier. Neue Studie untersucht Angriffe zwischen 2021…

7 Tagen ago