Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Ressourcenverwaltung in SWT

Ressourcenverwaltung in SWT

Daniel Bader

March 06, 2012
Tweet

More Decks by Daniel Bader

Other Decks in Programming

Transcript

  1. ▪ Viele SWT-Objekte verwenden Ressourcen, die vom Betriebssystem bereitgestellt werden

    ▪ Beispiele: Color, Font, Image, Widget, … (+ Subklassen) SWT-Ressourcen? 2
  2. ▪ Viele SWT-Objekte verwenden Ressourcen, die vom Betriebssystem bereitgestellt werden

    ▪ Beispiele: Color, Font, Image, Widget, … (+ Subklassen) ▪ Derartige Ressourcen müssen evtl. explizit freigegeben werden (→dispose()), da es sonst zu Memory Leaks kommt SWT-Ressourcen? 2
  3. ▪ Viele SWT-Objekte verwenden Ressourcen, die vom Betriebssystem bereitgestellt werden

    ▪ Beispiele: Color, Font, Image, Widget, … (+ Subklassen) ▪ Derartige Ressourcen müssen evtl. explizit freigegeben werden (→dispose()), da es sonst zu Memory Leaks kommt ▪ Das ist für Javaentwickler potentiell ungewohnt … SWT-Ressourcen? 2
  4. Die Reihenfolge der finalize()-Aufrufe ist nicht deterministisch Manche Betriebssysteme erwarten

    die Freigabe von Ressourcen auf dem UI / “main” Thread Warum nicht einfach finalize() verwenden? 4
  5. Die Reihenfolge der finalize()-Aufrufe ist nicht deterministisch Manche Betriebssysteme erwarten

    die Freigabe von Ressourcen auf dem UI / “main” Thread Viele Ressourcen sind limitiert, diese Limitierungen sind dem Java Garbage Collector aber unbekannt Warum nicht einfach finalize() verwenden? 4
  6. Die Reihenfolge der finalize()-Aufrufe ist nicht deterministisch Manche Betriebssysteme erwarten

    die Freigabe von Ressourcen auf dem UI / “main” Thread Viele Ressourcen sind limitiert, diese Limitierungen sind dem Java Garbage Collector aber unbekannt ... Warum nicht einfach finalize() verwenden? 4
  7. Die Reihenfolge der finalize()-Aufrufe ist nicht deterministisch Manche Betriebssysteme erwarten

    die Freigabe von Ressourcen auf dem UI / “main” Thread Viele Ressourcen sind limitiert, diese Limitierungen sind dem Java Garbage Collector aber unbekannt ... Warum nicht einfach finalize() verwenden? 5
  8. Die Reihenfolge der finalize()-Aufrufe ist nicht deterministisch Manche Betriebssysteme erwarten

    die Freigabe von Ressourcen auf dem UI / “main” Thread Viele Ressourcen sind limitiert, diese Limitierungen sind dem Java Garbage Collector aber unbekannt ... Warum nicht einfach finalize() verwenden? 5 → Automatische Freigabe zu unflexibel und komplex
  9. Die Reihenfolge der finalize()-Aufrufe ist nicht deterministisch Manche Betriebssysteme erwarten

    die Freigabe von Ressourcen auf dem UI / “main” Thread Viele Ressourcen sind limitiert, diese Limitierungen sind dem Java Garbage Collector aber unbekannt ... Warum nicht einfach finalize() verwenden? 5 → Automatische Freigabe zu unflexibel und komplex → Lösung: Programmierer muss Ressourcen explizit mit der Methode dispose() freigeben
  10. 7

  11. Regel #1: “If you created it, you dispose it” 7

    ▪ Beispiel: ▪ dispose() nicht aufrufen, falls Ressource einem anderen Objekt “gehört” Font font = new Font(display, "Arial", 10, SWT.NORMAL); // // ... use font here ... // font.dispose();
  12. Regel #1: “If you created it, you dispose it” 7

    ▪ Beispiel: ▪ dispose() nicht aufrufen, falls Ressource einem anderen Objekt “gehört” Font font = new Font(display, "Arial", 10, SWT.NORMAL); // // ... use font here ... // font.dispose(); Regel #2: “Disposing the parent disposes the children” ▪ Beispiel: widget.dispose() gibt (wie intuitiv erwartet) auch die von widget verwendeten Ressourcen frei
  13. ▪ Vereinfacht Ressourcenverwaltung mittels Reference Counting ▪ Verhindert unnötige, mehrfache

    Instanziierung derselben Ressource (e.g. Font “Arial” wird 100x verwendet) ▪ Kümmert sich um die Ressourcenfreigabe ResourceManager 8