Startzeit durch Threads minimieren
-
Hallo,
ich hätte eine Frage zum Thema: "Wie verkürze ich die Startzeit meiner Applikation?". Folgende Problemstellung:
Ich habe gestern mal mein erstes Java-Projekt, einen Editor (es gibt ja so wenige ), angeschaut und festgestellt, dass es viel Verbesserungsspielraum gibt, besonders beim Starten des Editors. Der Konstruktor der Hauptklasse erledigt hierbei folgende Aufgaben:1. Pfade setzen
2. Konfigurationsdatei lesen (benötigt die Pfade)
3. Hinzufügen der ganzen Komponenten (JToolbar, JTextArea usw. , braucht Daten der Konfigurationsdatei:Größe, Position, Schrift usw.)
4. Hinzufügen der ActionListener zu den Komponenten (die Komponenten müssen natürlich erstellt sein)Ich habe es momentan mal so umgestellt, dass das Hinzufügen der Listeners in einem Thread geschieht, nachdem die ersten drei Punkte abgearbeitet wurden. Das hat aber erwartungsgemäß eher geringe Auswirkungen gehabt.
Es sieht momentan ungefährt so aus:
public class Editor extends javax.swing.JFrame implements Runnable { public Editor() { setPaths(); readIni(); initComponents(); new Thread(this).start(); } public void run() { addListeners(); } public static void main(String []args) { new Editor().setVisible(true); }; };
Momentan braucht er 5 Sekunden für einen Kaltstart (wird das erste mal gestartet) und 1-3 Sekunden für nen Warmstart (wurde bereits gestartet, vm liegt schon im Speicher).
Also wie schaffe ich es, die Zeiten zu drücken? Oder geht das nur mit viel Umschreiberei des Codes?
Thanks in advance,
GPC
-
Schonmal einen Profiler verwendet um rauszubekommen, was genau so lange dauert? 5 Sekunden um ein File einzulesen und ein paar Komponenten zu erstellen ist eindeutig zu viel
MfG SideWinder
-
SideWinder schrieb:
Schonmal einen Profiler verwendet um rauszubekommen, was genau so lange dauert? 5 Sekunden um ein File einzulesen und ein paar Komponenten zu erstellen ist eindeutig zu viel
MfG SideWinder
Jap, das ist es, aber da ist der Start der JVM ja auch dabei. Profiler hab ich bisher noch nicht benutzt, kannst du mir nen guten empfehlen?
-
*push*
-
Das ist vor allem gefühlte Trägheit. Zeig möglichst schnell was an. Zeig gleich nen Splash Screen oder schon mal das Editor-Fenster (noch deaktiviert) und setz die Priorität des EDT hoch.
Amsonsten kannst du aber nicht so viel machen. Die Startzeit der VM ist eines der größten Schwachpunkte bei Java, was man mit Java 6 gerade versucht anzugehen. Zum Beispiel will man mit einem neuem Bytecode-Verifier die Verifizierungszeit erheblich verkürzen.
-
Bezüglich Splash-Screens wird es in Java 6.0 übrigens auch etwas neues geben. Da kann man dann einen Splash-Screen anzeigen noch bevor die JVM richtig geladen wird.
-
Java 6 ist das Ende von C++.
-
Optimizer: Vielen Dank, werde einen Splashscreen einbauen und ein wenig mit der Priorität rumspielen, um die Wartzeit zu "verkürzen".
-
Falls es jemanden interessiert, hier mein Ergebnis:
Thread-Prio auf MAX gesetzt brachte am meisten (besonders unter Win, obwohl ich mich dort meistens über die Leistungsverteilung bei Threads aufrege), Komponenten werden normal im Ctor hinzugefügt, nur die Listener und andere kleinere Aufgaben im Thread erledigt.
Kein SplashScreen, war zwar ganz nett bei Kaltstart, aber bei nem Warmstart hat's verzögert.
Ein paar Instanzierungen und andere Sachen konnten auch nach hinten geschoben werden.Startzeiten auf meiner Kiste (2500 XP, 512 MB 2.5, Linux 2.6.13 und Win2K):
Kaltstart Warmstart Win: 2-3s 0s !! Linux: 2-3s 1s
So kann man damit leben.