Speicherverwaltung

  • Speicheraufbau: Stack, Heap, Statische Daten, Argumente, Programm-Code, Laufzeitsystem

Daten

  • Argumente: beim Aufruf mitgegebene Werte
  • Programm Code: ausführbare Instruktionen
  • Laufzeitsystem: z.B. Kopie von Datei-Puffern

Stack

  • Rücksprungadressen, lokale Variablen
  • Methodenaufruf: Activation Record / Frame
  • effizient, rekursive Aufrufe möglich
  • Werte nicht abrufbar nach return

Heap

  • Dynamische Daten als Pointer/Referenzen
  • rekursive Aufrufe, dynamische Datenstrukturen möglich
  • Zuteilung/Freigabe relativ rechenintensiv

Statische Daten

  • Konstanten, static
  • Speicher kann einmal beim Start alloziert werden
  • Keine dynamischen Datenstrukturen möglich

Speicherverwaltung

  • Listen für belegten und freien Speicher führen
  • Fragmentierung -> periodisch defragmentieren
  • Zu wenig Speicher angefordert -> Referenz-Variablen automatisch auf Default initialisieren, Bereichsabfragen auf Gültigkeit prüfen
  • Speicher nicht freigegeben -> Memory Leak, abhilfe durch Speicherverwaltung
  • Speicher wird zu früh freigegeben -> Dangling Pointer, abhilfe durch Speicherverwaltung

Referenzzählung

  • Verweise auf ein Objekt zählen
  • Löschen wenn keine Referenz mehr existiert
  • Vorteile: einfach, geringer Aufwand, Speicher wird schnell freigegeben
  • Nachteile: Programmiere muss zählen, zusätlziche Operationen bei Pointer-Zuweisung, zyklische Datenstrukturen können nicht freigegeben werden
  • Smart-Pointer: Zählen selber Zuweisungen auf und ab

Garbage Collector

Mark-Sweep GC

  • Speicher wird bei Bedarf freigegeben, nicht sofort
  • Mark: von Wurzelobject ausgehend alle erreichbaren Blöcke markieren
  • Sweep: sequentiell durch den Heap alle nicht markierten Blöcke freigeben, Markierungen löschen
  • Vorteile: keine zusätzlichen Operationen bei Pointer-Zuweisung, zyklische Strukturen können aufgelöst werden
  • Nachteile: Aufwand, Programm muss gestoppt werden, Fragmentierung

Copying GC

  • Zwei Semi-Spaces mit aktuellen und obsoleten Daten, Daten werden umkopiert
  • Cheney's Copying Algorithm (drei Farben): Breitensuche
  • Vorteile: keine Fragmentierung, Suche nach freien Blöcken entfällt
  • Nachteile: doppelt so viel Speicher nötig, langer Unterbruch, Lokalität des RAM Zugriffs geht verloren

Generational GC

  • Hotspot Heap: Young Gen (eden, Survivor Space (s0,s1)), Old Gen (Tenured), Perm Gen (Permanent)
  • Young Gen:
    • Neue Objeckte werden hier angelegt
    • Minor Collection - Stop the World
  • Old Gen:
    • GC Survivors werden hier abgelegt
    • Major Collection - Stop the World
  • Perm Gen:
    • Metadaten für die JVM welche Klassen und Methoden beschreiben
    • Wird bei Full Collection einbezogen

Weak References

  • Objekte in Sammlungen können nicht freigegeben werden
  • Weak References werden nicht traversiert
  • Vorteil: Sammlungen können freigegeben werden
  • Nachteil: Dangling Pointer

Finalizer

  • Freigabe von Ressources spätestens bei löschen von Objekt
  • Zweistufig wegen z.B. Referenz auf sich selbst
    • 1 GC - finalize aufrufen und in Liste speichern
    • 2 GC - Objekte in Finalized-Liste die nicht markiert wurden freigeben

results matching ""

    No results matching ""