17.11.2014 Aufrufe

Performanceoptimierung der Datenanalyse in Netzwerkgraphen durch

Performanceoptimierung der Datenanalyse in Netzwerkgraphen durch

Performanceoptimierung der Datenanalyse in Netzwerkgraphen durch

MEHR ANZEIGEN
WENIGER ANZEIGEN

Sie wollen auch ein ePaper? Erhöhen Sie die Reichweite Ihrer Titel.

YUMPU macht aus Druck-PDFs automatisch weboptimierte ePaper, die Google liebt.

3. Vorbetrachtungen e<strong>in</strong>er hochperformanten Lösung<br />

dem 01.01.1970 00:00 Uhr. Damit lässt sich die Ausführungszeit von Quelltext<br />

relativ genau messen. Die Funktion System.nanoTime() funktioniert analog,<br />

jedoch mit <strong>der</strong> Angabe des Timestamps <strong>in</strong> Nanosekunden. Dazu ist zu bemerken,<br />

dass die Granularität zwar nanosekundengenau ist, jedoch nicht die<br />

Präzision [26]. Die Präzision hängt vom Betriebssystem ab, auf dem die JVM<br />

ausgeführt wird. In <strong>der</strong> Javadokumentation [26] wird <strong>der</strong> <strong>in</strong> List<strong>in</strong>g 3.5 angegebene<br />

Java-Quelltext zur Zeitmessung vorgeschlagen. Dort f<strong>in</strong>den sich auch<br />

weitere Informationen zu diesen beiden API-Funktionen.<br />

1 long startTime = System.nanoTime();<br />

2 // ... the code be<strong>in</strong>g measured ...<br />

3 long estimatedTime = System.nanoTime() - startTime;<br />

List<strong>in</strong>g 3.5: Zeitmessung für e<strong>in</strong> Java-Programm<br />

Beson<strong>der</strong>e Beachtung, bei <strong>der</strong> Zeitmessung für Java-Programme, ist dem<br />

JIT-Compiler zu schenken. Java-Programme werden grundsätzlich von Quelltext<br />

<strong>in</strong> Bytecode übersetzt. Bytecode ist e<strong>in</strong>e plattformunabhängige Form des<br />

Java-Programms. Auf dem Zielsystem wird <strong>der</strong> Bytecode <strong>in</strong> Hotspots unterteilt<br />

und je<strong>der</strong> Hotspot wird unmittelbar vor <strong>der</strong> Ausführung kompiliert. So<br />

kann beispielsweise <strong>der</strong> Inhalt e<strong>in</strong>er Schleife o<strong>der</strong> e<strong>in</strong>er Funktion e<strong>in</strong> Hotspot<br />

se<strong>in</strong>. Das führt dazu, dass die erste Ausführung im ersten Durchlauf deutlich<br />

länger dauert als alle weiteren Durchläufe. Zusätzlich hat die JVM e<strong>in</strong>en<br />

JIT-Optimierer, <strong>der</strong> den Programmablauf zur Laufzeit mit Compilertechniken<br />

optimiert. So kann z. B. <strong>der</strong> IF- und <strong>der</strong> ELSE-Zweig e<strong>in</strong>er Entscheidung zur<br />

Laufzeit vertauscht werden, wenn <strong>der</strong> Optimierer feststellt, dass die Bed<strong>in</strong>gung<br />

öfter falsch ist als wahr. Ähnliche Mechanismen gibt es auch auf Hardwareebene<br />

<strong>in</strong> mo<strong>der</strong>nen CPUs.<br />

Das führt dazu, dass die gemessenen Zeiten <strong>der</strong> ersten Durchläufe ignoriert<br />

werden sollten. Danach kann wie<strong>der</strong> mit den <strong>durch</strong>schnittlichen Ausführungszeiten<br />

gearbeitet werden. Die <strong>durch</strong>schnittlichen Ausführungszeiten s<strong>in</strong>d später<br />

relevant um e<strong>in</strong>e Vorhersage für die Dauer großer Datenanalyen machen zu<br />

können.<br />

© Andreas Redmer — 29. September 2011 39

Hurra! Ihre Datei wurde hochgeladen und ist bereit für die Veröffentlichung.

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!