Performance-Optimierung in JAVA

Slides:



Advertisements
Ähnliche Präsentationen
Imperative Programmierung
Advertisements

der Universität Oldenburg
DVG Dateien Dateien. DVG Dateien 2 Die Klasse File Die Klasse File stellt die Verbindung zwischen dem Filesystem des Rechners und dem.
der Universität Oldenburg
0 Energieeffiziente Compilierung für Digitale Signalprozessoren Markus Lorenz Peter Marwedel Rainer Leupers Projekt Prozessorarchitekturen und Compilertechniken.
Sequentielle Liste - Array
Java: Dynamische Datentypen
Listen Richard Göbel.
Indirekte Adressierung
FH-Hof Verwaltung von Zeichenketten Richard Göbel.
Java: Grundlagen der Sprache
Motivation Richard Göbel.
Java: Referenzen und Zeichenketten
FH-Hof Java Packages Richard Göbel. FH-Hof Das Modulkonzept für Java Packages dienen zur Strukturierung größerer Java- Programme Ein Package kann: eigene.
Sommersemester 2004 Jan Drewnak Entwicklung und Einsatz von Geosoftware I Praktikum Sitzung X1 Sitzung X1: Packages & Wiederholung.
Praktikum Entwicklung und Einsatz von Geosoftware I - Sitzung 3 Klassen, Objekte, Arrays und Kontrollstrukturen Sommersemester 2003 Lars Bernard.
IKG - Übung Diskrete Mathe I – Jörg Schmittwilken
Institut für Kartographie und Geoinformation Prof. Dr. Lutz Plümer Diskrete Mathematik I Vorlesung Listen-
PKJ 2005/1 Stefan Dissmann Rückblick auf 2005 Was zuletzt in 2005 vorgestellt wurde: Klassen mit Attributen, Methoden und Konstruktoren Referenzen auf.
Vortrag III Hier in der Vorlesungszeit! Anwesenheitspflicht Jede Gruppe hat 6 Minuten! Stellt eure GUI vor –was ihr besonderes gemacht habt –Spektakuläre.
DVG Dateien. DVG Die Klasse File Die Klasse File stellt die Verbindung zwischen dem File-System des Rechners und dem JAVA-Programm her.
Arrays,Strings&Pointer in C/C++
DVG Einführung in Java1 Einführung in JAVA.
Java in 9 Folien Besser: Online-Buch Go to Java 2.
Der VFP Debugger - Coverage und Profiling. © 1999 TMN-Systemberatung GmbH Der VFP Debugger n Neues Aussehen, eigene Task n Erweiterte Möglichkeiten n.
Inhalt danach. inhalt danach inhalt danach inhalt danach inhalt danach inhalt danach.
Zurück zur ersten Seite SEP Entwurf und Implementierung einer effizienten Rechenstruktur zur Baumdarstellung mittels Java-Texteditoren Betreuer : Matthias.
FH-Hof Algorithmen und Datenstrukturen - Einführung Richard Göbel.
Einführung in die Programmierung
Plattformunabhängige Programmiersprache
Abteilung für Telekooperation Übung Softwareentwicklung 1 für Wirtschaftsinformatik Dr. Wieland Schwinger
Javakurs FSS 2012 Lehrstuhl Stuckenschmidt
EPROG Tutorium Einheit 4 Klassen und Objekte. Wiederholung Schleifen do... while while for break/continue Strings String char Methoden für Strings Arrays.
Grundlagen der Programmierung
Entwicklung verteilter Anwendungen I, WS 13/14 Prof. Dr. Herrad Schmidt WS 13/14 Kapitel 1 Folie 2 Microsoft.NET Framework: Quelle:
Die Zählschleife int s = 0 for (int k=1; k
Informatik 1 Letzte Übung.
Eine Präsentation von Peter Rasser
Variablenkonzept Klassisch, in Java Basistyp
Die Klasse String und ihre Methoden
Purga - Scriptengine Ein Einblick.
Einfach und doppelt verkettete Listen in JAVA by Jens Weibler
Arrays / Felder Themen: Arrays / Felder / Vektoren Was soll das eigentlich? Erstellen von Arrays Arrays auslesen. Wie sie verwaltet werden.
EPROG Tutorium #5 Philipp Effenberger
EPROG Tutorium #3 Philipp Effenberger
Arrays und ArrayLists In JAVA.
Programmieren in C Grundlagen C 2
Javelin Internet-based parallel computing using Java.
Programmiervorkurs WS 2014/15 Methoden
CuP - Java Achte Vorlesung Entspricht ungefähr Kapitel 4.1 des Skriptums Montag, 28. Oktober 2002.
Arrays und ArrayLists In JAVA.
Java-Kurs - 7. Übung Besprechung der Hausaufgabe Referenzvariablen
Alois Schütte Advanced System Programming 2 Interprozeßkommunikation  2.1 JVM Ablaufumgebung  2.2 Java Native Interface (JNI)  Verwendung von.
Übersicht Nachtrag zu Ausdrücken
Übung Informatik I exercise01. 2 Inhaltsübersicht Nachbesprechung Übung 1 Individuelle Fragen/Bemerkungen.
Java-Kurs - 4. Übung Hausaufgabe Weitere Kontrollstrukturen
Diskrete Mathematik I Vorlesung 2 Arrays.
Parallel Programming OpenMP und JOMP
Einführung in Java PING e.V. Weiterbildung Andreas Rossbacher 24. März 2005.
Seminar aus Softwareentwicklung: Programmierstil Effizienz
28/07/2015Walther-Rathenau- Gewerbeschule 1 Zeichenketten (Strings)
Diskrete Mathe Diskrete Mathematik I Listen Vorlesung 4.
GAME PROGRAMMING PATTERNS – FLYWEIGHT & OBSERVER Robert Nystrom Softwaretechnologie II Teil 2 Anike Schulz.
Christos, Kornelia, Jan Christos, Kornelia, Jan Entwicklungsumgebung Versteht unseren Java Programm Code Versteht unseren Java Programm.
Die STL. Schreiben und Lesen von Dateien  Einbinden von  Lesen und Schreiben über stream-Objekte Streams führen Transformationen zwischen Programmobjekten.
Protokollieren, überwachen und verfolgen Vortrag zum Seminar „Aspektorientierte Programmierung“ von Andre Kaplick - 6. Juni 2016.
Pointer. * und &  Bei der Definition int var1; ○ // „normale“ Variable int *var2; ○ // Zeiger auf einen Integer int *var2 = NULL; ○ // … incl. Initialisierung.
Import java.util.*; Hilfsklassen, die man eigentlich immer braucht.
Raphael Fischer Informatik II - Übung 03 Raphael Fischer
«Delegierter» Methoden Schablone Funktionszeiger
 Präsentation transkript:

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, Aspekte der Speicheroptimierung in Java, Profiling.

Überblick (1) Charakteristika von Java; Verarbeitung von Zeichenketten: Langsame String-Verkettung, Optimierte String-Verkettung, Weitere String-Operationen, StringBuffer-Methode toString(); Vektoren und Listen: Die Klasse java.util.Vector,

Überblick (2) Dateizugriffe; Speicheroptimierung; Profiling: ArrayList und LinkedList; Dateizugriffe; Speicheroptimierung; Profiling: Profiling-Grundlagen, Einsatz eines Profilers; Allgemeine Verbesserungen.

Charakteristika von Java Plattformunabhängigkeit; Just-In-Time-Compiler (JIT): Schnellere Ausführung von Methoden; Performance-Einbußen durch Checks bei Bereichsüberschreitungen bei (Arrays, Strings), Dereferenzierung von Zeigern gegen null, Zuweisungen von Objektinstanzen, vielen arithmetischen Operationen.

Langsame String-Verkettung Sample-Java-Code: String s = ""; for (int i=0; i<20000; i++) s += “*"; (1) Interne Übersetzung des Compilers: s = new StringBuffer(s). append("*").toString(); (1*) 60000 temporäre Objekte, wdh. Kopieren der Zeichen im StringBuffer-Konstruktor.

Optimierte String-Verkettung Sample-Java-Code: StringBuffer b = new StringBuffer(1000); for (int i=0; i<20000; i++) b.append(“*“); (2) String s = b.toString(); Vorteile: Aufruf von (2) meist in konstanter Zeit, Faktor 10 schneller, 60000 temporäre Objekte weniger.

Weitere String-Operationen Einfügen in Strings: s = "*" + s; b.insert(0, "*"); Faktor 4 und keine temporären Objekte. Löschen in Strings: s = s.substring(0, 1000) + s.substring(2000); s = b.delete(1000, 2000).toString(); Löschen anstelle von Verbinden.

StringBuffer-Methode toString() Kein Kopiervorgang beim Aufruf, derselbe verwendete Puffer, shared-Flag im StringBuffer-Objekt, Abfrage bei verändernden StringBuffer-Methoden und ev. Kopieren vor der Veränderung; echter Kopiervorgang erst nötig bei schreibendem Zugriff auf den StringBuffer.

Die Klasse java.util.Vector Speicherung von Listen von Objekten. Sequentieller und wahlfreier Zugriff. Implementierung des Datenpuffers als Array. Attribute Kapazität und Ladefaktor. Standard: Kapazität=10, Ladefaktor=0 (=2*). Auch ohne Multithreading-Betrieb infolge von synchronized-Methoden entsprechend langsam.

LinkedList und ArrayList Implementierung als doppelt verkettete Liste. Keine Kopiervorgänge beim Erweitern. Vielzahl der allozierten Objekte. ArrayList: Implementierung ähnlich wie Vector. Infolge fehlender synchronized-Attribute sehr hohe Performance.

Dateizugriffe (1) Writer-Klassen: Verarbeitung von Character-Streams. 16-Bit breite UNICODE-Zeichen. Kapselung in einen BufferedWriter. Meisten externen Dateien arbeiten mit 8-Bit-Zeichen  Konvertierung durch Methoden der Klasse sun.io.CharToByteConverter.

Dateizugriffe (2) OutputStream-Klassen: RandomAccessFile: Arbeiten mit Bytes anstelle von Zeichen. Keine aufwendige Konvertierung. Ausgabe der niederwertigen 8 Bit je Zeichen. RandomAccessFile: Ungepufferter Byteweiser Zugriff langsam. Verarbeitung eines ganzen Arrays von Bytes. int num = file.read(buf);

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

Profiling-Grundlagen Überwachung und Messung: Performanceparameter (z.B. CPU-Zeit), Anzahl der allozierten Objekte, Anzahl der Aufrufe bestimmter Methoden. Profiler-API: JVMPI. Beispielimplementierung hprof: Brauchbares, aber rein textuelles Analyse-Tool.

Einsatz eines Profilers Programm mit Option –Xrunhproof starten. Größen Rechenzeit- und Speicherverbrau-cher werden ermittelt, und über ihre Stack-traces wird folg. in LOG-File geschrieben: Woher werden sie aufgerufen? Wie tragen sie zum Programmergebnis bei? Programm kann verbessert werden. Zufriedenstellend oder erneut von vorne.

Allgemeine Verbesserungen (1) Hoher Anteil von lokalem Code am Rechenzeitverbrauch: Vermindern der Anzahl von Schleifendurchläufen, Verwendung von Ganzzahlen, Herausziehen von schleifeninvariantem Code, Vermeiden der Doppelauswertung von gemeinsamen Teilausdrücken, Wiederverwenden bekannter Teilergebnisse,

Allgemeine Verbesserungen (2) Verwendung alternativer Datenstrukturen, Eliminieren von unbenutztem Code, Reduzieren der Stärke von Ausdrücken. Hoher Anteil in Untermethoden: Verminderung der Aufrufhäufigkeit, Ersetzung durch performantere Aufrufe, Erhöhung der Ablaufgeschwindigkeit. System.currentTimeMillis();