• Keine Ergebnisse gefunden

Optimieren und Verschlechtern

N/A
N/A
Protected

Academic year: 2022

Aktie "Optimieren und Verschlechtern"

Copied!
13
0
0

Wird geladen.... (Jetzt Volltext ansehen)

Volltext

(1)

Optimierungen

(2)

Notwendigkeit

h¨aufige Situation: Programm funktioniert im Prinzip fehlerfrei, aber nicht mit gew¨unschter Performanz

Symptome des Mangels an Performanz:

OutOfMemoryError wird geworfen

kein fl¨ussiger Programmablauf

keine Termination bei gr¨oßeren Eingaben

. . .

Bedarf an Optimierung besteht aber im Grunde immer (z.B.

Testumgebung ungleich der Umgebung, in der Software eingesetzt wird)

(3)

Responsability

nicht nur wichtig, dass ein Programm i.A. schnell ist

bei Interaktion mit Benutzer auch psychologischer Effekt nicht zu untersch¨atzen

Programm, dass w¨ahrend langer Berechnungirgendetwas sichtbar macht, wird normalerweise als besser wahrgenommen

Bsp.: Fortschritt anzeigen, bewegende Bilder, . . .

ebenfalls wichtig aus diesem Grund: Programm soll auf Eingaben sofortreagieren

Bsp.: l¨angere Suche in einer Datenbank

Responsability kann z.B. erreicht werden durch Trennung von Threads f¨ur Interaktion und f¨ur rechenintensive Teile

(4)

Vorsicht

lauff¨ahige Software zu optimieren ist prinzipiell sinnvoll, muss aber mit Vorsicht durchgef¨uhrt werden

Optimierungen bzgl. Laufzeitverhalten k¨onnen auch nachteilige Effekte haben, gehen z.B. zu Lasten der Lesbarkeit des Codes / der Korrektheit / etc.

keine Optimierungen ohne Grund und erkennbaren Effekt durchziehen!

More computing sins are committed in the name of efficiency (without necessarily achieving it) than for any other single reason - including blind stupidity. William Wulf

We should forget about small efficiencies, say about 97% of the time: premature optimization is the root of all evil.

Donald Knuth

(5)

Optimieren und Verschlechtern

eine Optimierung kann mehrere Aspekte des Programms betreffen, z.B.

Laufzeitverhalten

Geschwindigkeit

Platzverbrauch

Sourcecode

Les- und Wartbarkeit

Korrektheit

Dokumentation

Machbarkeit

. . .

Anderung ist oft Optimierung nur bzgl. eines Aspektes, aber¨ Verschlechterung bzgl. anderer

(6)

Beispiele

Zeit vs. Platz vs. Machbarkeit Repr¨asentation einerMengeals

1 boolean[]mit Zugriff inO(1), PlatzO(n)

2 Suchbaum mit Zugriff inO(m), PlatzO(m)

(m= Anzahl eingef¨ugter Elemente,n= Anzahl m¨oglicher Elemente)

beachte:nmundn=∞,m<sogar m¨oglich oder Grundmenge unbekannt

Platz vs. Lesbarkeit

Array der Gr¨oßenmit intuitiven Indizes 1, . . . ,nder Elemente

Geschwindigkeit vs. Lesbarkeit

vorzeitiger Abbruch einer Schleife;whilestattfor

(7)

Optimierungen durchf¨ uhren

vor ¨Anderung am Sourcecode muss abgew¨agt werden:

ist ¨Anderung wirklich eine Optimierung im Ganzen?

welche Aspekte werden optimiert?

welche anderen sind betroffen?

Aufwand

wieviel Arbeit erfordert die Optimierung?

um wieviel wird das Programm dadurch verbessert?

Design

steht ge¨anderter Code z.B. im Widerspruch zu ¨ublichem objekt-orientiertem Design?

danach/dabei muss z.B.

Dokumentation angepasst werden

Korrektheit neu ¨uberpr¨uft werden

(8)

Optimierungspotential finden

bei nicht-offensichtlichem Mangel an Performanz:

sinnvolle Wahl von Datenstrukturen

welche Operationen werden h¨aufig in dem Programm

ausgef¨uhrt und welche Datenstrukturen sind bekanntermaßen am besten daf¨ur?

Einsatz von guten Algorithmen

welches abstrakte Problem steckt hinter der Anwendung und welcher (bekannte) Algorithmus ist daf¨ur der beste?

Bsp.: Erreichbarkeit aller freien Felder auf Spielbrett kann als Nicht-Erreichbarkeit in ungerichteten Graphen aufgefasst werden Breitensuche

Profiling

Vermeidung von Java-Operationen, die als teuer bekannt sind

(9)

Profiling

Tabellieren des Ressourcenverbrauchs einzelner Programmteile bei einem Programmdurchlauf (vgl. Problematik beim Testen)

verschiedene Tools zum Profiling von Java-Programmen erh¨altlich;

Eclipse und NetBeans z.B. haben auch integrierten Profiler; hier keine Vorstellung eines bestimmten

typische n¨utzliche Information, die der Profiler zur¨uckgibt:

H¨aufigkeit und Dauer einzelner Methodenaufrufe (beachte Verschachtelungen!)

Anzahl und Gr¨oße angelegter Objekte einer Klasse

Anzahl von Objekten, die vom Garbage Collector eingesammelt wurden

anhand dessen Entscheidungen bzgl. Optimieren oder auch Nicht-Optimieren treffen

(10)

Teure Operationen in Java

Anlegen von Objekten

Exceptions werfen

viele Klassen benutzen

geboxte Datentypen (Boolean,Integer, etc.)

manche Operationen auf Strings, insbesondere Konkatenation

garbage collection

type cast

synchronisierte Methoden

. . .

(11)

Tips zur Programmbeschleunigung

besonderes Augenmerk auf Schleifen

public static int[] countArr = new int[1];

private static Vector collection = new Vector(10000);

private static int points = 3;

// 1. Versuch

for(long i=0; i<collection.size()*50000; i++) { countArr[0]=countArr[0] + 5 * points;

}

// 2. Versuch

int count=countArr[0];

int addpoints=5*points;

int i=collection.size()*50000;

for(; --i>=0; ){

count+=addpoints;

}

countArr[0]=count;

Performanzgewinn: 53894ms 846ms

(12)

Tips zur Programmbeschleunigung

Datentypint erlaubt schnelleren Zugriff alslong,byte, short und als Objekte sowieso

lokale Variablen verwenden

Schleifen nicht durch Exceptions terminieren

Iterationen statt Rekursionen

Objektpools statt Neuerzeugung (siehe auch Factory Pattern)

. . .

(13)

Hinweise

Geschwindigkeit moderner Rechner nicht untersch¨atzen!

Platzoptimierung h¨aufig wichtiger als Zeitoptimierung

moderne Compiler nicht untersch¨atzen!

viele Optimierungen (im Kontrollfluss) werden von Compilern automatisch durchgef¨uhrt

Anderungen im Rahmen von Optimierungen k¨¨ onnen Korrektheitsannahmen wie z.B. Invarianten verletzen;

Uberpr¨¨ ufung / Umformulierung / neue Tests n¨otig

http://www.javaperformancetuning.com/

Referenzen

ÄHNLICHE DOKUMENTE

Bischof, Roland/Burkhardt, Hermann/Dehne, Bernd: Grundsteine Kunst 1, Ernst Klett Schulbuchverlag, Stuttgart 1996 Büchner, Rainer/Dehne, Bernd/Kern, Erika: Grundsteine Kunst 2,

Nach einer Überprüfung durch unsere Expertengremien erfahren Sie durch eine schriftliche Mitteilung des Rat für Formgebung, ob Ihr Projekt die erforderli- chen Kriterien erfüllt

Diese Funktion ist sehr wichtig für die Integration von SUDO oder Po- werbroker mit OpenView Select Identity und somit für die Integration mit einem Identity Management-System,

IX  den Bezug zu den in Lernen sichtbar machen (Hattie 2013/2015) erklärten Einflussfaktoren* auf das Lernen herzustellen, haben wir diese im Text mit einem Doppelstern**

Alle Lernenden haben übereinander ge- schichtet drei Becher vor sich: einen roten, einen gelben und einen grünen (Ampel- becher).. Damit können sie schnell rück- melden, inwieweit

Als besondere Eigenschaft muß aber hervorgehoben werden, daß ihre Koeffizienten für ein bestimmtes Ellipsoid Funktionen allein des Azimuts c..:0 sind und mit ihm als

Wenn Demokratie erst durch Paragra- phen legitimiert oder organisiert wer- den muss, mag das ein wenig betrüb- lich sein, zumal basisdemokratische Avancen gegenüber dem Wahlvolk

Anfangs Juni organisierte Benevol Luzern an der Hochschule für Soziale Arbeit HSA in Luzern eine Tagung für verantwortliche Personen der Freiwilligenarbeit innerhalb von