Das Performance-Handbuch: Vorwort


Dieses Vorwort soll nicht nur die allgemeinen Ziele des Performance Handbuch darstellen, sondern insbesondere auch allen in der Vergangenheit hilfreichen Personen einen besonderen Dank aussprechen.

Autoren Bearbeiten

Inhaltlich haben an diesem Werk mitgearbeitet:

AutorAmerkungen
Sebastian Ritter

Motivation und Ziel dieses Dokumentes Bearbeiten

Als ich mit der Zusammenstellung - damals noch als "Make Java - Performance [MJP]" bezeichnet - angefangen habe, war Wikibooks noch nicht geboren und Wikipedia, wenn überhaupt als Randnotiz wahrzunehmen. Die Einbringung dieses Buches stellt für mich daher nur die konsequente Weiterführung des Gedankens dar, euch die Informationen gesammelt und aufbereitet nahe zu bringen. Ich hoffe Ihr könnt dies unterstützen. --Bastie 19:48, 15. Feb. 2009 (CET)

Dieses Dokument stellt Möglichkeiten und Ansätze dar, wie Sie die Performance Ihrer Anwendungen erhöhen können. Die wesentlichen Ziele des Dokumentes bestehen aus den folgenden Punkten:

  • Erworbenes Wissen über Performance im Zusammenhang mit Softwareentwicklung und Performance so festzuhalten, dass man 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.

Garantien für das Funktionieren der angesprochenen Möglichkeiten können leider nicht übernommen werden; dazu ist der Bereich zu sehr einem Wandel unterlegen.

Fundstelle Bearbeiten

Die jeweils aktuellste Version dieses Dokuments können Sie unter http://de.wikibooks.org/wiki/Das_Performance_Handbuch finden. Fragen, Rückmeldungen, Anregungen und / oder Wünsche sind willkommen und sollten in die Diskussionsseiten des Wikibooks eingetragen werden.

Unterstützung Bearbeiten

Sind Sie der Meinung, es gibt wichtige Punkte, die bisher nicht in diesem Buch behandelt wurden? Dann steht Ihnen auch die Möglichkeit zur Verfügung, ohne finanzielle Mittel dieses Projekt zu unterstützen. Sie können Anregung zu diesem Punkt geben oder auch einen eigenen Artikel verfassen.

Historie Bearbeiten

Dieses Dokument ist aus den unter denselben Namen veröffentlichten Folien hervorgegangen. Daher werden wir die Historie übernehmen und weiterführen.

VersionvomBemerkung
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.1302.09.2000Attribute, 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 beta17.10.2000wesentliche Erweiterung zu Datenbanken und Netzwerk
2.0012.12.2000Totale 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.1001.05.2001Neuer 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
2.2022.11.2001Löschen von JTextComponent, Null Pattern, Singleton Muster, Synchronisieren synchronisierter Methoden, Zählrichtung in Schleifen, Speicherbedarf Innerer Klassen, Schlüsselwort strictfp, Teil 8 Implementierung mit Perl begonnen
2.30nicht veröffentlichtUmstrukturierung zu klareren Trennung zwischen allgemeinen und sprachenabhängigen Informationen, Perlmodule (use, do, require), Hardware: Dateisystem, neuer Anhang zum erstellen Ausführbarer Anwendungen incl. Linken, Java: Statische Variablen richtig initialisieren, Speicherverbrauch von Objekte ermitteln, System und Umgebung: Netzwerk erweitert
3.002009Übertragung nach Wikibooks

Glauben ist etwas Grundsätzliches! – Falsches?!? Bearbeiten

Dieses Dokument enthält (fast) ausschließlich Hinweise und Tipps, welche getestet wurden. Allerdings bedeutet testen hier auf einer bestimmten Betriebssystem-Plattform.

Verdeutlichung
[dclj]: „Uebrigens treffen Performancebehauptungen nicht für alle Plattformen gleichermassen 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.“
Quelle: Deutsche Javanewsgroup

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 Hardware, Betriebssysteme, Laufzeitumgebungen 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...

Verwendete Abkürzungen Bearbeiten

AbkürzungBedeutungErläuterungen
BNOBenutzeroberflächehäufig auch als GUI bezeichnet
EJBEnterprise Java BeansObjekte gem. J2EE Spezifikation
GUIGraphic User InterfaceBenutzeroberfläche
JDKJava Development KitJava Klassen zur Entwicklung
JITJust In Time CompilerOptimierung für die JVM
JREJava Runtime EnvironmentAusführungsumgebung für Javaanwendungen
JVMJava Virtuelle MaschineDer Übersetzer des Bytecode in Maschinensprache
LANLocal Area NetworkLokales Netzwerk. Ein LAN ist im allgemeinen ein besonders schnelles Netzwerk, auf welches von außen nur beschränkt zugegriffen werden kann.
MVCModel View ControllerEin Konzept zur Trennung von Anwendung und BNO
OOObjektorientierungEin Konzept der Anwendungsentwicklung
OOAObjektorientierte AnalyseFachanalyse, welche bereits den OO-Gedanken umsetzt
OODObjektorientiertes DesignModell, welches die Fachanalyse mit Rücksicht auf die verwendete Programmiersprache für die Implementierung vorbereitet
OOIObjektorientierte Implementation
UMLUnified Modelling LanguageBeschreibungssprache für objektorientierte Systeme.