Zwischenspeichern: Mit Javas Referenzobjekten ein Kinderspiel

Die Referenz-Warteschlange bietet sowohl blockierende als auch blockierungsfreie Methoden zum Entfernen von schwachen Referenzen aus der Warteschlange. Mehrere Strategien können angewendet werden, so z.B. das Abrufen der Warteschlange an wichtigen Stellen des Programms oder die Nutzung eines dedizierten Threads, um die Warteschlange zu durchlaufen und alle erforderlichen Bereinigungen durchzuführen.

Wie man sehen kann, wird zum Zeitpunkt seiner Erstellung jedes MyReference-Objekt bei einer Referenz-Warteschlange registriert. Und während MemoryBlocks vom Garbage Collector aufgesammelt werden, reihen sich deren entsprechenden Referenzobjekte in die Referenz-Warteschlange ein. Vor dem Ausdruck der ArrayList wurde die Warteschlange nach zu entfernenden null-Referenzen durchgesehen.

Listing A enthält die bekannte „Speicherverbrauchsklasse“ MemoryBlock während Listing B eine Beispiel-Anwendung darstellt, die über Referenzobjekte gehaltene MemoryBlocks in zunehmendem Maß verbraucht, so dass deren Speicherplatz bei Bedarf freigegeben werden kann. Die Beispiel-Anwendung bedient sich einer benutzerdefinierten Referenzklasse, MyReference, die von SoftReference abgeleitet wurde und in Listing C ersichtlich ist.

Abbildung A zeigt die Ausgabe dieses Beispiels. Man beachte, dass das Array nur die Referenzobjekte enthält, die auf gültige MemoryBlocks verweisen. Die vom Garbage Collector zurückgeforderten wurden entfernt.

Abbildung A
Abbildung A: Ergebnisse nach der Ausführung
von MemoryTest3. (Abbildung vergrößern)

Themenseiten: Anwendungsentwicklung, Software

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

Artikel empfehlen:

Neueste Kommentare 

Noch keine Kommentare zu Zwischenspeichern: Mit Javas Referenzobjekten ein Kinderspiel

Kommentar hinzufügen

Schreibe einen Kommentar

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