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

Ressourcenverwaltung in SWT

Sponsored · SiteGround - Reliable hosting with speed, security, and support you can count on.

Ressourcenverwaltung in SWT

Avatar for Daniel Bader

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