Diese Seite wurde verschoben. Sollten Sie nicht automatisch weitergeleitet werden klicken Sie bitte hier.

Make Java - Performance

Teil 0
Vorwort


Motivation und Ziel dieses Dokumentes

Motivation für die Erstellung
Da Java nicht gerade als hoch performante Sprache gilt beschäftigt man sich automatisch früher oder später mit diesem Thema etwas näher und irgendwann fing ich dann an alles zum Thema Java und Performance im allgemeinen zu sammeln. Zu diesem Zeitpunkt entstanden einige Folien, in denen ich dieses Wissen festhalten wollte. In der Newsgroup habe ich dann irgendwann einmal jemanden angeboten ihm diese zuzusenden. Ich hatte natürlich nicht mit dem Echo gerechnet, so dass ich innerhalb von zwei Tagen mehr als 20 Anfragen hatte. Ich entschloss mich die Folien auf meine Webseite zu setzen, wo diese inzwischen über 1700 mal abgerufen wurde. Irgendwann sind es über einhundert Folien und somit ließ leider die Übersichtlichkeit nach. Aus diesem Grund habe ich schließlich dieses Dokument erstellt.
Inhalt
Dieses Dokument stellt Möglichkeiten und Ansätze dar, wie Sie die Performance Ihrer Anwendungen erhöhen können. Inzwischen gibt der weitaus überwiegende Anteil Informationen wieder, die sich nicht auf eine bestimmte Programmiersprache beziehen. Dies ist jedoch eine historische Gegebenheit und wird sich vielleicht auch wieder ändern.
Fundstellen
Die jeweils aktuellste Version dieses Dokuments können Sie unter http://www.Bastie.de finden. Fragen, Rückmeldungen, Anregungen und / oder Wünsche sind willkommen und sollten per elektronischer Nachricht an mailto:MailTo@Bastie.de, Betreff: ‚MJP‘ gesendet werden. Dieses Dokument ist grundsätzlich frei und kostenlos und kann daher auch auf anderen privaten und / oder kommerziellen Webseiten kostenlos bereitgestellt werden. Sofern lediglich Links auf dieses Dokument verweisen sollen, ist eine Nachricht an o.g. Adresse sinnvoll.
Ziel dieses Dokuments
Die wesentlichen Ziele des Dokumentes bestehen aus den folgenden Punkten Mein erworbenes Wissen über Java und Performance so festzuhalten, dass ich es auch nach längerer Pause schnell wieder reaktivieren kann. Ein Nachschlagewerk zu sein, um schnell Lösungen zu finden oder zu erstellen. Deutschsprachig zu sein. Durch die Zielsetzung ergeben sich mitunter Wiederholungen. Dies ist bedingt durch die Tatsache, dass es sich auch um ein Nachschlagewerk handeln soll. Mir persönlich ist es nicht sehr angenehm, wenn in einem an sich abgeschlossenen Teil ständig Verweise auf Textpassagen anderer Teile zu finden sind.
Historie
Dieses Dokument ist aus den unter den selben Namen veröffentlichten Folien hervorgegangen. Daher werde ich die Historie übernehmen und weiterführen.
Version vom Bemerkung
1.00 ? Der erste Wurf mit den Teilen Optimieren, Java optimieren - Allgemein, System und Umgebung, Design, Implementation.
1.01 ? Teile Das Vorgehen, Erweiterungen zu Zeichenketten, Klassen, Containerklassen
1.02 ? Teil Implementation - Codierung : Threads ergänzt, System und Umgebung ergänzt, Ergebnisse zu transient eingearbeitet
1.10 ? Teil Java ist langsamer - Warum, Erläuterungen zur GC aufgenommen, Objekte erzeugen, Objekte verwerfen, Ergänzungen zu Containerklassen (Hashtable), Methoden (getter), Vergleichen
1.11 ? Objekte sichern
1.12 ? Wann sind Sie mit der Optimierung fertig?, 2. Objektpoolbeispiel, Streams, BNO, Component, Überarbeitungen und Ergänzungen u.a. im Aufbau
1.13 02.09.2000 Attribute, Java ist langsamer - Warum?, mehr JVM Wissen, Wahrheit - Sein oder Schein, Low-Priority-Threads, Exceptions, Außerdem wurde mehr Wert auf den Speicherverbrauch zur Laufzeit gelegt, List, HashMap, System und Umgebung - Netzwerk, Design - Netzwerk(CallBack), dynamisches Laden, System und Umgebung - Tools
2.00 beta 17.10.2000 wesentliche Erweiterung zu Datenbanken und Netzwerk
2.00 12.12.2000 Totale Umgestaltung: keine Folien mehr, sondern Fließtext. Wesentliche Erweiterungen zu Streams, Objekte sichern und Datenbank, Anfang eines kleinen FAQ. Und etwas Swing ist auch schon mit drin.
2.10 01.05.2001 Neuer Teil „Performance managen“, Allgemeines zu Performanceoptimierungen als eigenen Teil aufgenommen, Process Entity Muster, Ergänzungen zu System und Umgebung, Tools - serialver, Klarere Trennung zwischen Allgemeiner und Java Implementierung, Implementierung: ObjectOutputStream, Swing-Models, Icon und Tilesets

Allgemeines

Glauben ist etwas Grundsätzliches! - Falsches?!?
Dieses Dokument enthält (fast) ausschließlich Hinweise und Tipps, welche ich getestet habe. Allerdings bedeutet testen hier auf der Windows-Plattform (Windows NT 4 und Windows 98). Ein kleines Zitat aus der deutschen Newsgroup soll verdeutlichen, was ich hiermit zum Ausdruck bringen möchte:
„Uebrigens treffen Performancebehauptungen nicht fuer alle Plattformen gleichemassen zu. So sollte man z.B. unter FreeBSD oder Linux (Blackdown jdk1.2) einen Vector mittels der Methode toArray umwandeln. Unter Windows war die Methode um den Faktor 2 langsamer, dafuer das Umkopieren in einer Schleife etwas besser.“
Es bietet sich somit immer an die hier gemachten Aussagen zumindest kritisch zu hinterfragen. Das Dokument ist nicht der Weisheit letzter Schluss und gerade neuere Java-Versionen können zu neuen Ergebnissen führen. Irgendwo, schon wieder lässt mich mein Gedächnis im Stich, hab ich mal einen schönen Satz gelesen, welcher auch für dieses Dokument gilt: „Rechtschreib- und Grammatikfehler sind gewollt und dienen der Erhöhung der Aufmerksamkeit beim Leser.“ Na ja, oder so ähnlich...
Java und seine Versionen
Grundsätzlich spreche ich hier nicht von Javaversionen sondern von den Versionen des JDK. Das Dokument beschäftigt sich mit den verschiedensten Version. Die Beispiele wurden unter folgenden JRE getestet:
Java Runtime Envoirement Hersteller Testplattform
JRE 1.1.6 Borland WinNT
JRE 1.1.7 Sun WinNT
JRE 1.1.8 Sun Win98
JRE 1.2.0 Sun Win98
JRE 1.2.2 Sun Win98
JRE 1.3.0 Sun WinNT, Win98
JRE 1.3.0 IBM Win98
JView Microsoft Win98
Obwohl Java 2 (also JDK 1.2 ff.) sich in der Stand Alone Anwendungsentwicklung auf den drei direkt von Sun unterstützten Plattformen durchgesetzt hat, bleibt Java 1 weiterhin ein wichtiger Bestandteil. Dies liegt nicht zuletzt an der Tatsache das Microsoft im Internet Explorer bisher nur Java 1 direkt unterstützt. Das PlugIn von Sun schafft zwar Abhilfe, muss jedoch vom Benutzer vorher installiert werden. Aus diesem Grund wird auch immer wieder auf Java 1 verwiesen. Wer Applets entwickelt muss sich somit fast immer auch mit Java 1 auseinander setzten
Ein weiterer Grund liegt in den unterstützten Plattformen. Nicht jede Plattform verfügt über eine Java 2 Umsetzung und wiederum nicht jede Plattform hat einen JIT Compiler. Also werden auch ein paar Aussagen zu diesen Themen gemacht werden.
Begriffsdefinitionen
Eine Anwendung im hier verwendeten Sinn ist jeder Bytecode, der in der Lage ist eine Aufgabe in der ihm vorherbestimmten Weise durchzuführen.
Daraus folgt, das Applets, Applikationen, Beans und Servlets für mich diese Anforderungen erfüllen. Im Zweifel kann ich darunter auch noch ein neues „Look & Feel“ u.ä. verstehen. Ich will mich dabei nicht zu sehr einschränken.
Verwendete Abkürzungen
Abkürzung Bedeutung Erläuterungen
BNO Benutzeroberfläche häufig auch als GUI bezeichnet
GUI Graphic User Interface Benutzeroberfläche
JDK Java Development Kit Java Klassen zur Entwicklung
JIT Just In Time Compiler Optimierung für die JVM
JRE Java Runtime Environment Ausführungsumgebung für Javaanwendungen
JVM Java Virtuelle Machine Der Übersetzer des Bytecode in Maschinensprache
LAN Local Area Network Lokales Netzwerk. Ein LAN ist im allgemeinen ein besonders schnelles Netzwerk, auf welches von außen nur beschränkt zugegriffen werden kann.
MCV Model View Controller Ein Konzept zur Trennung von Anwendung und BNO
OO Objektorientierung Ein Konzept der Anwendungsentwicklung
OOA Objektorientierte Analyse Fachanalyse, welche bereits den OO-Gedanken umsetzt
OOD Objektorientiertes Design Modell, welches die Fachanalyse mit Rücksicht auf die verwendete Programmiersprache für die Implementierung vorbereitet
OOI Objektorientierte Implementation gleich wieder vergessen!
UML Unified Modelling Language Beschreibungssprache für objektorientierte Systeme.

Inhaltsverzeichnis
all rights reserved © Bastie - Sebastian Ritter @: w³: http://www.Bastie.de
Diese Seite ist Bestandteil der Internetpräsenz unter http://www.Bastie.de


Java Cobol Software Resourcen Service Links Über mich Zum Gästebuch Forum