Ein paar Bemerkungen zu Swing, NetBeans Platform und Performance Aljoscha Rittner Sepix GmbH, NetBeans Dreamteam Member

Slides:



Advertisements
Ähnliche Präsentationen
programmiert April-Juni 2003 von Knut Riechmann
Advertisements

der Universität Oldenburg
der Universität Oldenburg
DVG Einfache Klassen Einfache Klassen. DVG Einfache Klassen 2 Strukturen Beispiel: Personendaten bestehen aus –String name –String vorname.
Ein Beispiel in Java.
Einführung in die Programmierung Ausführbare Klassen
Ausnahmen HS Merseburg (FH) WS 06/07.
Java News & Music Der Chat
Threads Richard Göbel.
Java: Objektorientierte Programmierung
Java: Dynamische Datentypen
Java: Grundlagen der Objektorientierung
FH-Hof Fehlerbehandlung Richard Göbel. FH-Hof Konzept Fehler können mit dem Operator throw einer übergeordneten Funktion signalisiert werden. Parameter.
Konstruktoren.
Benötigte Applets Startseite: in HTML-Format Applet auf der Startseite Das Applet, das auf der Startseite geladen wird, wird die vier Buttons und die eine.
Praktikum Entwicklung und Einsatz von Geosoftware I - Sitzung 6 Model-View-Controler als Grundlage für Nutzerschnittstellen Sommersemester 2003 Lars Bernard.
Praktikum Entwicklung und Einsatz von Geosoftware I - Sitzung 7 User Interfaces in Java Sommersemester 2003 Lars Bernard.
Institut für Kartographie und Geoinformation Prof.-Dr. Lutz Plümer, Dr. Gerhard Gröger, Dipl.-Ing. Dirk Dörschlag Einführung in die Programmierung mit.
Programmieren mit JAVA
PRJ 2007/1 Stefan Dissmann Motivation Problem: gleiche Datenstrukturen werden für verschiedene Objekte gebraucht: z.B. Listen von Studierenden, Kunden,
PKJ 2005/1 Stefan Dissmann Rückblick auf 2005 Was zuletzt in 2005 vorgestellt wurde: Klassen mit Attributen, Methoden und Konstruktoren Referenzen auf.
Beanifiing the Browser Beans implementieren Serializable.
JAVA RMI.
Command Pattern Karola Schäuble,
1DVG3 - Eventbehandlung Eventbehandlung. DVG3 - Eventbehandlung 2 Events Events sind externe Ereignisse, die parallel zum normalen Programmablauf auftreten.
Modulare Programmierung
DVG Klassen und Objekte
DVG Einfache Klassen 1 Einfache Klassen. 2DVG Einfache KlassenStrukturen Beispiel: Personendaten bestehen aus String name String name.
EDV Parallelprogrammierung1 Parallelprogrammierung mit JAVA.
04 - Actions Actions Actions 2 Motivation In verschiedenen Swing-Komponenten werden ausgelöste Aktionen durch ActionListener behandelt. Häufig werden.
Einführung in die Programmierung Datensammlung
Informatikunterricht mit Java
Hänchen & Partner GmbH 1 Web-Anwendungen mit dem Jakarta Struts Framework 3.Juli 2003 Martin Burkhardt.
Seite 1 Interface - Konzept Ein Interface führt einen neuen Datentyp ein: interface Frau {... } Das Interface enthält Deklarationen ( keine Definitionen.
Sommersemester 2004 Jan Drewnak Entwicklung und Einsatz von Geosoftware I Praktikum Sitzung 6 Sitzung 6: Model-View-Controller als Grundlage.
Sommersemester 2004 Jan Drewnak Entwicklung und Einsatz von Geosoftware I Praktikum Sitzung 7 Sitzung 7: User Interfaces in Java.
PRJ 2007/1 Stefan Dissmann Verkettete datenstruktur: Liste Problem: Liste, die eine beliebige Zahl von Elementen verwaltet Operationen: Erzeugen, Anfügen,
Erste Schritte mit Eclipse Neues Projekt erstellen (1)
Socket-Programmierung
EPROG Tutorium Einheit 4 Klassen und Objekte. Wiederholung Schleifen do... while while for break/continue Strings String char Methoden für Strings Arrays.
Parallel Programming Thread Synchronization. Heute 1. Lösung zu Assignment 2 2. Erstellen und Starten von Threads in Java 3. Das synchronized Schlüsselwort.
EPROG Tutorium #5 Philipp Effenberger
EPROG Tutorium #3 Philipp Effenberger
Learning By Doing Parallelverarbeitung Multithreading (Nebenläufigkeit) Alte Idee der Parallelverarbeitung statt rein sequentieller Prozesse Parallelverarbeitung.
Letzte Chance!!! Exceptions Thread, Runnable Synchronized Wait, notify, notifyAll Thread States Semaphoren JCSP Swing JOMP Linearizability History Amdahl‘s.
Parallelisierung für Multiprozessor-Maschinen Teil 2.
Javelin Internet-based parallel computing using Java.
Programmiervorkurs WS 2014/15 Methoden
Threads in Java Wiederholung der BS Grundlagen Alois Schütte AOSD1.
Muster nebenläufiger Programmierung concurrent Packet von Java Alois Schütte AOSD1.
Alois Schütte Advanced System Programming 2 Interprozeßkommunikation  2.1 JVM Ablaufumgebung  2.2 Java Native Interface (JNI)  Verwendung von.
Prof. Dr. Alois Schütte Advanced System Programming 1 Das concurrent Paket 1 Überblick 2 Lock 3 Condition 4 Queue 5 Executors.
Java-Kurs Übung Benutzeroberflächen und Graphik Frames (Fenster)
Ausnahmen Vorlesung besteht aus zwei Teilen Programmierung (4 SWS)
Threads in Java Threads  Sprachumfang von Java Der Java-Standard fordert nur die Unterstützung von Thread-Prioritäten. Es gibt keine Forderung bzgl.:
Parallel Programming Semaphores / Reader - Writer - Lock
93 Das Monitorkonzept (nach Hoare/Brinch-Hansen 1974) Nur ein Prozess bzw. Thread kann zu einem bestimmten Zeitpunkt im Monitor aktiv sein => gegenseitiger.
Abstrakte Klassen und das Interface-Konzept
, Dr. Wolfram Amme, Softwareentwicklung in Java, FSU Jena, WS 2005/06 1 Beispiel class SpreadSheet { int cellA1, cellA2, cellA3; synchronized.
Java Programme nur ein bisschen objektorientiert.
Maven NetBeans Platform RCP Development Aljoscha Rittner Sepix GmbH, NetBeans Dreamteam Member
Vererbung in Java. public abstract class Form { protected int breite; protected int hoehe; protected String farbe; /** * Erzeuge eine Form der Breite.
Konstruktoren.
Praktische Informatik 1
1.Event Queue.
Java-Kurs Übung Klassen und Objekte: Vererbung (Fortsetzung)
Dynamisches Laden von Klassen
Haupttitel der Präsentation
Tutorstunde 10.
Implementieren von Klassen
 Präsentation transkript:

Ein paar Bemerkungen zu Swing, NetBeans Platform und Performance Aljoscha Rittner Sepix GmbH, NetBeans Dreamteam Member

Agenda ● Problemstellung ● Java ist langsam ● Swing ist langsam ● Threads entwirrt ● Lösungen ● Profiler ● Threading sinnvoll einsetzen ● Tweaking the VM

Agenda ● Problemstellung ● Java ist langsam ● Swing ist langsam ● Threads entwirrt ● Lösungen ● Profiler ● Threading sinnvoll einsetzen ● Tweaking the VM

Java ist langsam? Java gilt als Interpretersprache und soll langsam sein Garbage Collector stört die Laufzeitumgebung Objekte in Java sind zu schwerlastig it depends, it depends, it depends

Agenda ● Problemstellung ● Java ist langsam ● Swing ist langsam ● Threads entwirrt ● Lösungen ● Profiler ● Threading sinnvoll einsetzen ● Tweaking the VM

Swing ist langsam? ● Menüs, Buttons, Listen und Tabellen reagieren schwerfällig ● Ständig hängt die Anwendung und man kann nicht weiterarbeiten Old Java 5 Problem

Agenda ● Problemstellung ● Java ist langsam ● Swing ist langsam ● Threads entwirrt ● Lösungen ● Profiler ● Threading sinnvoll einsetzen ● Tweaking the VM

Threads entwirrt So was modernes wie Java kann doch mehrere Dinge gleichzeitig So was unmodernes wie Java schafft doch nicht mehrere Dinge gleichzeitig Warum kann Swing nicht gleichzeitig Malen und Denken? Ist Swing doch ein Mann?

Agenda ● Problemstellung ● Java ist langsam ● Swing ist langsam ● Threads entwirrt ● Lösungen ● Profiler ● Threading sinnvoll einsetzen ● Tweaking the VM

Profiler Zunächst ein Problem lösen, dann die Performance optimieren > Grundlegende Architekturüberlegungen aber nicht vergessen → Skalierbarkeit Mit dem Profiler prüfen, ob es ein Heap/gc()- Problem oder ein CPU Problem ist Hotspots mit dem Profiler finden, damit man nicht an der falschen Stelle rumdoktert

Profiler

Agenda ● Problemstellung ● Java ist langsam ● Swing ist langsam ● Threads entwirrt ● Lösungen ● Profiler ● Threading sinnvoll einsetzen ● Tweaking the VM

Threading - Swing Schwerpunkt Swing > Warum nur einen Event-Dispatcher-Thread? > RepaintMananger und seine Millionen Threads > Schwergewichtigen Thread starten oder nicht? SwingWorker > Seit Java 6 direkt dabei > > Sehr einfach, super integriert in Swing, vielseitig einsetzbar

Threading - Swing Schwerpunkt Swing > Warum nur einen Event-Dispatcher-Thread? > Keine synchronized Monitore!  Seit je her in jeder Sprache der Flaschenhals und beliebtes Einfalltor für Deadlocks  Mit Graphics-Pipelines (DirectDraw, OpenGL) sowieso kaum sinnvoll vom Anwender ansteuerbar > RepaintMananger und seine Millionen Threads > Exakt vom Swing-Backend gesteuerter Thread-Pool  Kann sauber mit Graphics-Device synchronisiert werden  Arbeitet mit oder ohne Double-Buffering  Paint-Buffer kann direkt im Grafikspeicher liegen, weil Swing die Hoheit über die Thread-Synchronisation hat

Threading – Swing - SwingWorker SwingWorker > Pros > Sehr einfach > Super integriert in Swing > Vielseitig einsetzbar > Cons > Worker Threads nicht konfigurierbar > Reihenfolge der Abarbeitung nicht definiert

Threading – Swing - SwingWorker SwingWorker > Pros > Sehr einfach final JLabel label; class MeaningOfLifeFinder extends SwingWorker public String doInBackground() { return findTheMeaningOfLife(); protected void done() { try { label.setText(get()); } catch (Exception ignore) { } (new MeaningOfLifeFinder()).execute();

Threading – Swing - SwingWorker SwingWorker > Pros > Super integriert in Swing // Always called in Event Dispatcher protected void done() { try { label.setText(get()); } catch (Exception ignore) { } ● getPropertyChangeSupport() ● add- & removePropertyChangeListener

Threading – Swing - SwingWorker SwingWorker > Pros > Vielseitig einsetzbar JTextArea textArea = new JTextArea(); final JProgressBar progressBar = new JProgressBar(0, 100); PrimeNumbersTask task = new PrimeNumbersTask(textArea, N); task.addPropertyChangeListener( new PropertyChangeListener() { public void propertyChange(PropertyChangeEvent evt) { if ("progress".equals(evt.getPropertyName())) { progressBar.setValue((Integer)evt.getNewValue()); } }); task.execute(); System.out.println(task.get()); //prints all prime numbers we have got

Threading – Swing – SwingWorker

Threading – Swing - SwingWorker SwingWorker > Cons > Worker Threads nicht konfigurierbar  Anzahl der WorkerThreads aus den Thread-Pool ist weder dokumentiert noch zu verändern > Reihenfolge der Abarbeitung nicht definiert  WorkerThreads können nicht in Workflows verkettet werden (nur statisch über blockierende get()-Aufrufe)

Threading – Swing – SwingWorker Last word to Swing Threads: >

Threading - NetBeans Schwerpunkt Swing, NetBeans ist Swing! > Event-Dispatcher-Thread, überall RequestProcessor ProgressFactory und ProgressHandle

Threading – NetBeans - RequestProcesor RequestProcessor > Pros > Existiert schon sehr lange in der NetBeans API > Jeder RequestProcessor ist sein eigener ThreadPool > Größe des ThreadPool (Througput) ist von 1 bis n konfigurierbar (1 = serielle Abarbeitung) > Verwendet Thread.isInterrupted() für Terminierung > Arbeitet mit pure Runnable > Hat einen einfachen Scheduler > Cons > Einiges an Deprecated Methods > Etwas unübersichtlicher Aufbau durch mehr Klassen > Keine Verbindung zum EDT

Threading – NetBeans - RequestProcesor RequestProcessor > Pros > Jeder RequestProcessor ist sein eigener ThreadPool > Größe des ThreadPool (Througput) ist von 1 bis n konfigurierbar (1 = serielle Abarbeitung) new RequestProcessor(String name) Creates a new named RequestProcessor with throughput 1. new RequestProcessor(String name, int throughput) Creates a new named RequestProcessor with defined throughput.

Threading – NetBeans - RequestProcesor RequestProcessor > Pros > Verwendet Thread.isInterrupted() für Terminierung > Arbeitet mit pure Runnable new RequestProcessor(String name, int throughput, boolean interruptThread) Creates a new named RequestProcessor with defined throughput which can support interruption of the thread the processor runs in. RP.post(new Runnable() { public void run () { while (veryLongTimeLook) { doAPieceOfIt (); if (Thread.interrupted ()) return; } });

Threading – NetBeans - RequestProcesor RequestProcessor > Pros > Hat einen einfachen Scheduler schedule(Callable callable, long delay, TimeUnit unit) schedule(Runnable command, long delay, TimeUnit unit) scheduleAtFixedRate(Runnable command, long initialDelay, long period, TimeUnit unit) scheduleWithFixedDelay(Runnable command, long initialDelay, long delay, TimeUnit unit)

Threading – NetBeans - RequestProcesor RequestProcessor > Cons > Einiges an Deprecated Methods > Etwas unübersichtlicher Aufbau durch mehr Klassen > Keine direkte Verbindung zum EDT - Gewachsen, einige Methoden sollten nicht verwendet werden (JavaDoc lesen) - Man muss mit RequestProcessor, RequestProcessor.Task, Runnable, ScheduledFuture und Future arbeiten (dafür aber sehr mächtig) - Konkurriert mit Executor (Java Concurrent API)

Threading – RequestProcesor - SwingWorker? RequestProcessor oder SwingWorker? > SwingWorker immer dann, wenn man exakt nur mit Swing-Komponenten zu tun hat und lange Prozesse für die Aktualisierung von Ausgaben in Swing-Komponenten notwendig sind. > RequestProcessor dann, wenn die zu langen Prozesse mit oder ohne Swing-Komponenten verarbeitet werden müssen und Ausgaben nach Swing optional sind (Dann SwingUtilities.invoke(Later)) > RequestProcessor dann, wenn man definierte Throughputs benötigt, wiederkehrende Tasks ansteuern will oder Tasks zu bestimmten Zeiten ausführen will > RequestProcessor dann, wenn man ProgressHandle und der Möglichkeit arbeiten will, Tasks abzubrechen (Cancellable).

Threading RequestProcesor-ExecutorService? RequestProcessor oder ExecutorService? > ExecutorService + Executor + ThreadPool-Implementationen aus der Java Concurrent API und RequestProcessor sind im Prinzip das gleiche. > RequestProcessor ist ein ScheduledExecutorService und implementiert die Methoden aus der Java Concurrent API > Geschmackssache.

Threading – NetBeans - Progress ProgressFactory und ProgressHandleFactory > Progress API bietet umfangreiches Werkzeug, um alle Threads komfortabel im UI anzuzegen und zu steuern > ProgressHandleFactory > Erzeugt ProgressHandle-Objekte > ProgressHandle > Steuert die Ausgabe einer UI-Komponente und darf nie im EventDispatcherThread aufgerufen werden > ProgressUtils > Helper-Klasse, um blockierende Prozesse mit Dialogen auszuführen (modale Prozesse)

Threading – NetBeans - Progress ProgressHandleFactory > createHandle(String displayName, Action linkOutput) > Create a progress ui handle for a long lasting task. > createHandle(String displayName, Cancellable allowToCancel, Action linkOutput) > Create a cancellable progress ui handle for a long lasting task. > createProgressComponent(ProgressHandle handle) > Get the progress bar component for use in custom dialogs, the task won't show in the progress bar anymore.

Threading – NetBeans - Progress ProgressHandle > setInitialDelay(int milliseconds) > start() oder start(steps) > progress (String nachricht, int step) > switchToDeterminate oder switchToIndeterminate() > setDisplayName (String displayName) > finish()

Threading – NetBeans - Progress ProgressUtils > Ein paar nützliche Methoden um Dialoge mit Progress-UI Komponente anzuzeigen, um dabei gleichzeitig den aktuellen EDT komplett modal zu blocken. > d.h., User kann die Anwendung so lange nicht bedienen > aber: Ausgaben bleiben weiterhin möglich (keine einfrieren der Anwendung) > showProgressDialogAndRun, showProgressDialogAndRunLater runOffEventDispatchThread

Agenda ● Problemstellung ● Java ist langsam ● Swing ist langsam ● Threads entwirrt ● Lösungen ● Profiler ● Threading sinnvoll einsetzen ● Tweaking the VM

Tweaking the VM Internet ressources: > Use Server Hotspot instead of Client Hotspot > In your JDK > Tuning Garbage Collection in Java VM > > Aber: > Nicht übertreiben. Die beste Arbeit macht die VM mit automatisch ermittelten Parametern

Fragen & Antworten