unverständliche Laufzeitunterschiede

M

ME2

Gast
Hey,

ich habe Dijkstra programmiert und dann eine Laufzeitmessung mit System.currentTimeMillis() gemacht.
Dazu habe ich mein Programm anhand eines fest def. Beispiels 50-mal laufen lassen und den Wert gemittelt -> 120ms. Wenn ich eine nicht benötigte Variable in einer Klasse lösche (diese Variable wird nie benutzt), verbessert sich das ganze auf 110ms. OK macht Sinn.

Wenn ich allerdings nur die erste Ausführungszeit betrachte, d.h. nicht gemittelt über 50 Durchläufe, dann benötigt der Code mit Variable ca. 165ms und der ohne ca. 210ms. Dies habe ich jetzt vllt. schon 100-mal ausprobiert. Gemittelt ergibt sich ich immer dieser deutliche Unterschied.

Das verstehe ich nicht. Woran liegt das?
 
S

SlaterB

Gast
hast du auch schon 111ms, 112ms gesehen? so genau kann gar nicht gemessen werden,
und der Programmstart ist besonders kritisch mit Anforderung von Speicherplatz, parallele Hintergrund-Initialisierung

lasse Testprogramme erstmal paar Sekunden starten, die Testaktionen ein paar mal leer durchlaufen lassen, um sich 'einzuspielen'

messe besser nur Aktionen, die insgesamt einige Sekunden dauern, 5 sec zu 8 sec ist ein spürbarer Unterschied,
im ms-Bereich kann man nichts wirklich ablesen,
aber 100ms als Durchschnitt von 50 Abläufen kommt ja durchaus in den Bereich, nicht ganz verkehrt,
dann kann aber durchaus auch ein Ablauf von doppelter Zeit dabei sein, dafür gibts Durchschnitte
 
M

ME2

Gast
Danke. "warm-up" klingt gut.

Mich hatte es eben gewundert, dass nach vielen Durchläufen ein Wert von fast 50ms sich ergeben hatte, obwohl eigentlich der fast exakt gleiche Code, mit einer Variable auskommentiert, ausgeführt wurde.
Ein Ergebnis, bei dem der Code mit auskommentierter Variable schneller war, kam nie vor.

Das ganze bezog sich auch nur auf dieses spezielle Beispiel und ist nicht aussagekräftig für die allg. Performance, was ja auch der Test mit vielen Schleifendurchläufen gezeigt hat.


Ich habe mir mal die stat. Auswertung graphisch anzeigen lassen.
Funktionsaufruf 500 mal in einer Schleife gemessen.
Dies 5 mal wiederholt und die Werte gemittelt.
Es ist nur der erste Punkt, d.h. der erste Aufruf der Funktion, der die "falsche" Zeitdifferenz aufweist.
Hier einmal eine Grafik davon:

 
Ähnliche Java Themen

Ähnliche Java Themen

Neue Themen


Oben