18
Performance- Performance- Optimierung in JAVA Optimierung in JAVA Bernegger Hans Peter Bernegger Hans Peter Klinger Andreas Klinger Andreas Schneider Martin Schneider Martin

Performance-Optimierung in JAVA

  • Upload
    nalani

  • View
    21

  • Download
    2

Embed Size (px)

DESCRIPTION

Performance-Optimierung in JAVA. Bernegger Hans Peter Klinger Andreas Schneider Martin. Themen. Geschwindigkeit von Java-Programmen, Interpretierter und kompilierter Code, Tuning von String-Zugriffen, Verwendung von Vektoren und Listen, Tuning von Dateizugriffen, - PowerPoint PPT Presentation

Citation preview

Page 1: Performance-Optimierung in JAVA

Performance-Optimierung Performance-Optimierung in JAVAin JAVA

Bernegger Hans PeterBernegger Hans Peter

Klinger AndreasKlinger Andreas

Schneider MartinSchneider Martin

Page 2: Performance-Optimierung in JAVA

22

ThemenThemen

Geschwindigkeit von Java-Programmen,Geschwindigkeit von Java-Programmen, Interpretierter und kompilierter Code,Interpretierter und kompilierter Code,Tuning von String-Zugriffen,Tuning von String-Zugriffen,Verwendung von Vektoren und Listen,Verwendung von Vektoren und Listen,Tuning von Dateizugriffen,Tuning von Dateizugriffen,Aspekte der Speicheroptimierung in Java,Aspekte der Speicheroptimierung in Java,Profiling.Profiling.

Page 3: Performance-Optimierung in JAVA

33

Überblick (1)Überblick (1)

Charakteristika von Java;Charakteristika von Java;Verarbeitung von Zeichenketten:Verarbeitung von Zeichenketten:

Langsame String-Verkettung,Langsame String-Verkettung,Optimierte String-Verkettung,Optimierte String-Verkettung,Weitere String-Operationen,Weitere String-Operationen,StringBuffer-Methode StringBuffer-Methode toString()toString();;

Vektoren und Listen:Vektoren und Listen:Die Klasse Die Klasse java.util.Vectorjava.util.Vector,,

Page 4: Performance-Optimierung in JAVA

44

Überblick (2)Überblick (2)

ArrayListArrayList und und LinkedListLinkedList;;Dateizugriffe;Dateizugriffe;Speicheroptimierung;Speicheroptimierung;Profiling:Profiling:

Profiling-Grundlagen,Profiling-Grundlagen,Einsatz eines Profilers;Einsatz eines Profilers;

Allgemeine Verbesserungen.Allgemeine Verbesserungen.

Page 5: Performance-Optimierung in JAVA

55

Charakteristika von JavaCharakteristika von Java

Plattformunabhängigkeit;Plattformunabhängigkeit; Just-In-Time-Compiler (JIT):Just-In-Time-Compiler (JIT):

Schnellere Ausführung von Methoden;Schnellere Ausführung von Methoden; Performance-Einbußen durch Checks beiPerformance-Einbußen durch Checks bei

Bereichsüberschreitungen bei (Arrays, Strings),Bereichsüberschreitungen bei (Arrays, Strings),Dereferenzierung von Zeigern gegen null,Dereferenzierung von Zeigern gegen null,Zuweisungen von Objektinstanzen,Zuweisungen von Objektinstanzen,vielen arithmetischen Operationen.vielen arithmetischen Operationen.

Page 6: Performance-Optimierung in JAVA

66

Langsame String-VerkettungLangsame String-Verkettung

Sample-Java-Code:Sample-Java-Code:String s = "";String s = "";

for (int i=0; i<20000; i++)for (int i=0; i<20000; i++)

s += “*"; s += “*"; (1)(1)

Interne Übersetzung des Compilers:Interne Übersetzung des Compilers: s = new StringBuffer(s). s = new StringBuffer(s). append("*").toString();append("*").toString(); (1*)(1*)

60000 temporäre Objekte, wdh. Kopieren 60000 temporäre Objekte, wdh. Kopieren der Zeichen im StringBuffer-Konstruktor.der Zeichen im StringBuffer-Konstruktor.

Page 7: Performance-Optimierung in JAVA

77

Optimierte String-VerkettungOptimierte String-Verkettung

Sample-Java-Code:Sample-Java-Code:StringBuffer b = new StringBuffer(1000);StringBuffer b = new StringBuffer(1000);

for (int i=0; i<20000; i++)for (int i=0; i<20000; i++)

b.append(“*“);b.append(“*“); (2)(2)

String s = b.toString();String s = b.toString();

Vorteile:Vorteile:Aufruf von Aufruf von (2) (2) meist in konstanter Zeit,meist in konstanter Zeit,Faktor 10 schneller,Faktor 10 schneller,60000 temporäre Objekte weniger.60000 temporäre Objekte weniger.

Page 8: Performance-Optimierung in JAVA

88

Weitere String-OperationenWeitere String-Operationen

Einfügen in Strings:Einfügen in Strings:s = "*" + s;s = "*" + s;b.insert(0, "*");b.insert(0, "*");Faktor 4 und keine temporären Objekte.Faktor 4 und keine temporären Objekte.

Löschen in Strings:Löschen in Strings:s = s.substring(0, 1000) + s.substring(2000);s = s.substring(0, 1000) + s.substring(2000);s = b.delete(1000, 2000).toString();s = b.delete(1000, 2000).toString();Löschen anstelle von Verbinden.Löschen anstelle von Verbinden.

Page 9: Performance-Optimierung in JAVA

99

StringBuffer-Methode StringBuffer-Methode toString()toString()

Kein Kopiervorgang beim Aufruf,Kein Kopiervorgang beim Aufruf,derselbe verwendete Puffer,derselbe verwendete Puffer,sharedshared-Flag im StringBuffer-Objekt,-Flag im StringBuffer-Objekt,Abfrage bei verändernden StringBuffer-Abfrage bei verändernden StringBuffer-

MethodenMethodenund ev. Kopieren vor der Veränderung;und ev. Kopieren vor der Veränderung;echter Kopiervorgang erst nötig bei echter Kopiervorgang erst nötig bei

schreibendem Zugriff auf den StringBuffer.schreibendem Zugriff auf den StringBuffer.

Page 10: Performance-Optimierung in JAVA

1010

Die Klasse Die Klasse java.util.Vectorjava.util.Vector

VectorVector::Speicherung von Listen von Objekten.Speicherung von Listen von Objekten.Sequentieller und wahlfreier Zugriff.Sequentieller und wahlfreier Zugriff. Implementierung des Datenpuffers als Array.Implementierung des Datenpuffers als Array.Attribute Attribute KapazitätKapazität und und LadefaktorLadefaktor..Standard: Kapazität=10, Ladefaktor=0 (=2*).Standard: Kapazität=10, Ladefaktor=0 (=2*).Auch ohne Multithreading-Betrieb infolge von Auch ohne Multithreading-Betrieb infolge von

synchronized-Methodensynchronized-Methoden entsprechend entsprechend langsam.langsam.

Page 11: Performance-Optimierung in JAVA

1111

LinkedListLinkedList und und ArrayListArrayList

LinkedListLinkedList:: Implementierung als doppelt verkettete Liste.Implementierung als doppelt verkettete Liste.Keine Kopiervorgänge beim Erweitern.Keine Kopiervorgänge beim Erweitern.Vielzahl der allozierten Objekte.Vielzahl der allozierten Objekte.

ArrayListArrayList:: Implementierung ähnlich wie Implementierung ähnlich wie VectorVector.. Infolge fehlender Infolge fehlender synchronized-Attributesynchronized-Attribute sehr sehr

hohe Performance.hohe Performance.

Page 12: Performance-Optimierung in JAVA

1212

Dateizugriffe (1)Dateizugriffe (1)

WriterWriter-Klassen:-Klassen:Verarbeitung von Verarbeitung von Character-StreamsCharacter-Streams..16-Bit breite UNICODE-Zeichen.16-Bit breite UNICODE-Zeichen.Kapselung in einen Kapselung in einen BufferedWriterBufferedWriter..Meisten externen Dateien arbeiten mit 8-Bit-Meisten externen Dateien arbeiten mit 8-Bit-

Zeichen Zeichen Konvertierung durch Methoden Konvertierung durch Methoden der Klasse der Klasse sun.io.CharToByteConvertersun.io.CharToByteConverter..

Page 13: Performance-Optimierung in JAVA

1313

Dateizugriffe (2)Dateizugriffe (2)

OutputStreamOutputStream-Klassen:-Klassen:Arbeiten mit Bytes anstelle von Zeichen.Arbeiten mit Bytes anstelle von Zeichen.Keine aufwendige Konvertierung.Keine aufwendige Konvertierung.Ausgabe der niederwertigen 8 Bit je Zeichen.Ausgabe der niederwertigen 8 Bit je Zeichen.

RandomAccessFileRandomAccessFile::Ungepufferter Byteweiser Zugriff langsam.Ungepufferter Byteweiser Zugriff langsam.Verarbeitung eines ganzen Arrays von Bytes.Verarbeitung eines ganzen Arrays von Bytes. int num = file.read(buf);int num = file.read(buf);

Page 14: Performance-Optimierung in JAVA

1414

SpeicheroptimierungSpeicheroptimierung

Jede Allozierung kostet Rechnerzeit.Jede Allozierung kostet Rechnerzeit.Objekte recyceln.Objekte recyceln.Nicht mehr referenzierter Speicher.Nicht mehr referenzierter Speicher.Große Mengen an temporären Objekten.Große Mengen an temporären Objekten.Objektreferenzen Objektreferenzen OutOfMemoryErrorOutOfMemoryError..System.gc();System.gc();Variablen explizit Wert Variablen explizit Wert nullnull zuweisen. zuweisen.

Page 15: Performance-Optimierung in JAVA

1515

Profiling-GrundlagenProfiling-Grundlagen

Überwachung und Messung:Überwachung und Messung:Performanceparameter (z.B. CPU-Zeit),Performanceparameter (z.B. CPU-Zeit),Anzahl der allozierten Objekte,Anzahl der allozierten Objekte,Anzahl der Aufrufe bestimmter Methoden.Anzahl der Aufrufe bestimmter Methoden.

Profiler-API: JVMPI.Profiler-API: JVMPI.Beispielimplementierung Beispielimplementierung hprofhprof::

Brauchbares,Brauchbares,aber rein textuelles Analyse-Tool.aber rein textuelles Analyse-Tool.

Page 16: Performance-Optimierung in JAVA

1616

Einsatz eines ProfilersEinsatz eines Profilers

Programm mit Option Programm mit Option –Xrunhproof–Xrunhproof starten. starten.Größen Rechenzeit- und Speicherverbrau-Größen Rechenzeit- und Speicherverbrau-

cher werden ermittelt, und über ihre Stack-cher werden ermittelt, und über ihre Stack-traces wird folg. in traces wird folg. in LOGLOG-File geschrieben:-File geschrieben:Woher werden sie aufgerufen?Woher werden sie aufgerufen?Wie tragen sie zum Programmergebnis bei?Wie tragen sie zum Programmergebnis bei?

Programm kann verbessert werden.Programm kann verbessert werden.Zufriedenstellend oder erneut von vorne.Zufriedenstellend oder erneut von vorne.

Page 17: Performance-Optimierung in JAVA

1717

Allgemeine Verbesserungen (1)Allgemeine Verbesserungen (1)

Hoher Anteil von lokalem Code am Hoher Anteil von lokalem Code am Rechenzeitverbrauch:Rechenzeitverbrauch:Vermindern der Anzahl von Vermindern der Anzahl von

Schleifendurchläufen,Schleifendurchläufen,Verwendung von Ganzzahlen,Verwendung von Ganzzahlen,Herausziehen von schleifeninvariantem Code,Herausziehen von schleifeninvariantem Code,Vermeiden der Doppelauswertung von Vermeiden der Doppelauswertung von

gemeinsamen Teilausdrücken,gemeinsamen Teilausdrücken,Wiederverwenden bekannter Teilergebnisse,Wiederverwenden bekannter Teilergebnisse,

Page 18: Performance-Optimierung in JAVA

1818

Allgemeine Verbesserungen (2)Allgemeine Verbesserungen (2)

Verwendung alternativer Datenstrukturen,Verwendung alternativer Datenstrukturen,Eliminieren von unbenutztem Code,Eliminieren von unbenutztem Code,Reduzieren der Stärke von Ausdrücken.Reduzieren der Stärke von Ausdrücken.

Hoher Anteil in Untermethoden:Hoher Anteil in Untermethoden:Verminderung der Aufrufhäufigkeit,Verminderung der Aufrufhäufigkeit,Ersetzung durch performantere Aufrufe,Ersetzung durch performantere Aufrufe,Erhöhung der Ablaufgeschwindigkeit.Erhöhung der Ablaufgeschwindigkeit.

System.currentTimeMillis();System.currentTimeMillis();