Systeme zur automatischen Speicherbereinigung

Die Profile aktiver Verfahren zur Speicherbereinigung legten einige grundlegende Mängel hinsichtlich der Funktionsweise der GC-Algorithmen im Vergleich zu einer idealen Erfassung nicht mehr benötigten Speichers offen. Die meisten Objekte in einer ausgeführten Anwendung weisen nur eine kurze Lebensdauer auf, wobei nur ganz wenige Objekte während des gesamten Zyklus einer Anwendung bestehen bleiben. Die oben geschilderten Algorithmen behandeln alle Objekte gleich. Leider ist dadurch für jedes aktive Objekt der gleiche Aufwand erforderlich (z.B. für das Verschieben oder Markieren), was sich negativ auf die Performance auswirkt. Langlebige Objekte werden ständig unnötigerweise hin und her verschoben, da sie alle Speicherbereinigungen überleben.

Moderne Garbage Collectors wie der in der neuesten Java Hotspot VM enthaltene Collector verwenden getrennte Pools für jüngere und ältere Objekte, die sogenannten Generationen. Wenn ein Objekt eine bestimmte Anzahl von Speicherbereinigungen überlebt (manchmal auch nur eine, je nach Collector), wird es von einem jüngeren in einen älteren Pool verschoben. Der ältere Pool wird erheblich seltener bereinigt, da man davon ausgeht, dass Objekte mit einer bestimmten Lebensdauer auch noch länger bestehen bleiben.

Dieser Ansatz führt zu einer erheblich verringerten Belastung des Garbage Collectors. Kurzlebige Objekte, die innerhalb eines Bereinigungsintervalls überflüssig werden, wirken sich weniger stark auf den Collector aus, da die meisten Collectors vorwiegend auf Live-Objekte ausgerichtet sind. Ältere Generationen werden weniger oft bereinigt, da so ein unnötiges Verschieben alter Objekte vermieden wird.

Innerhalb unterschiedlicher Generationen können sogar verschiedene Algorithmen angewandt werden. Beispielsweise eignet sich das Stop & Copy-Verfahren für den Pool mit den jungen Objekten, da man davon ausgeht, dass die meisten jungen Objekte eine kurze Lebensdauer haben (dieses Verfahren beeinträchtigt die Performance nur in dem Maße, wie nicht zu bereinigende Objekte vorhanden sind). Bei älteren Generationen können detailliertere Algorithmen angewandt werden, da die Performance keine so große Rolle spielt.

Sparsamer Umgang mit der Speicherbereinigung
Trotz all ihrer Vorteile verbraucht die Speicherbereinigung auch stets CPU-Kapazitäten eines laufenden Programms. Der beste Weg zur Vermeidung solcher Beeinträchtigungen liegt ganz einfach im Erstellen weniger Objekte. Weniger Objekte erfordern weniger Speicherbereinigungen, wodurch sich theoretisch die Performance verbessert.

Die Speicherbereinigung ist eine sinnvolle Funktion zur Vereinfachung alltäglicher Programmiervorgänge. Sie zählte zwar in den vergangenen Jahren zu den Schwerpunkten der Forschung, allerdings ist der Großteil der heute verwendeten Technologien ziemlich veraltet (vor allem im Computing-Bereich). Daher sollte die Speicherbereinigung stets in Maßen eingesetzt werden.

Page: 1 2 3 4 5

ZDNet.de Redaktion

Recent Posts

Digitalisierung! Aber wie?

Mehr Digitalisierung wird von den Unternehmen gefordert. Für KMU ist die Umsetzung jedoch nicht trivial,…

2 Wochen ago

Meta meldet Gewinnsprung im ersten Quartal

Der Nettoprofi wächst um 117 Prozent. Auch beim Umsatz erzielt die Facebook-Mutter ein deutliches Plus.…

2 Wochen ago

Maximieren Sie Kundenzufriedenheit mit strategischem, kundenorientiertem Marketing

Vom Standpunkt eines Verbrauchers aus betrachtet, stellt sich die Frage: Wie relevant und persönlich sind…

2 Wochen ago

Chatbot-Dienst checkt Nachrichteninhalte aus WhatsApp-Quellen

Scamio analysiert und bewertet die Gefahren und gibt Anwendern Ratschläge für den Umgang mit einer…

2 Wochen ago

Microsoft stellt kleines KI-Modell Phi-3 Mini vor

Seine Trainingsdaten umfassen 3,8 Milliarden Parameter. Laut Microsoft bietet es eine ähnliche Leistung wie OpenAIs…

2 Wochen ago

Google schließt kritische Sicherheitslücke in Chrome

Sie erlaubt eine Remotecodeausführung außerhalb der Sandbox. Betroffen sind Chrome für Windows, macOS und Linux.

2 Wochen ago