PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Ausführungszeit einer Funktion messen



svetlana
24-11-2006, 11:13
Hallo,

ich möchte die Ausführungszeit einer Funktion in Java messen.
wie z.b. in c
...
clock_t start, end;

start=clock();
do_something();
end=clock();
...

Die Ausführungszeit beträgt end-start.

Gibt es in Java eine Möglichkeit die Zeit zu messen?

danke

Scylla
24-11-2006, 11:57
Schau dir mal die Klasse java.util.Date an. besonders hierbei die Funktion getTime()

wenn du 2 Variablen anlegst, in die du vor bzw. nach funktionsaufruf den Wert von getTime() abspeicherst, dann hast du durch die Differenz von beiden die Laufzeit der Funktion.

mehlvogel
24-11-2006, 14:46
System.nanoTime() ab Java 5 ist dafür gemacht. Vorher gibt es auch noch System.currentTimeMillies(), das ist aber meiner Erfahrung nach zu ungenau. Um wirkliche Aussagen über die Laufzeit zu machen solltest du aber generell die Zeit mehr als einmal messen und dann den Wert mitteln - aber selbst dann sind die Werte noch mit Vorsicht zu genießen, wie gesagt wie Messungen sind von vielen Faktoren abhängig und schwanken u.U. sehr stark.


http://java.sun.com/j2se/1.5.0/docs/api/java/lang/System.html#nanoTime()

Liberty
24-11-2006, 18:53
Moin,

ich habe vor etwa zwei Wochen eine Übungsgruppenteilnehmer dafür zusammengefaltet, dass er die Effizienz von Sortieralgorithmen durch die Messung der Ausführungszeit belegen wollte (So nach dem Motto: "Guckt mal, der ist schneller..."), aber das nur am Rande...

Ich würde grundsätzlich immer empfehlen, nach anderen Kriterien für Effizienz und Komplexität zu suchen und mit diesen zu arbeiten. Wenn's allerdings um so Fragen geht wie "Wie viele Anfragen kann mein Programm pro Minute verarbeiten" solltest Du den Test andersherum anlegen und die Zeit vorgeben und dann die bearbeiteten Was-Auch-Immer bei Volllast zählen.

Wenn's aber unbedingt sein muss, dann ist die System.nanoTime die Methode der Wahl, allerdings nie vergessen, die Zeitmessung selbst kostet natürlich auch Zeit ;-)

So long,
Liberty

bischi
24-11-2006, 19:13
Ich würde grundsätzlich immer empfehlen, nach anderen Kriterien für Effizienz und Komplexität zu suchen und mit diesen zu arbeiten. Wenn's allerdings um so Fragen geht wie "Wie viele Anfragen kann mein Programm pro Minute verarbeiten" solltest Du den Test andersherum anlegen und die Zeit vorgeben und dann die bearbeiteten Was-Auch-Immer bei Volllast zählen.

Vielleicht möchtest du gerade eben auch verschiedene Sprachen / Rechnerarchitekturen /... miteinander vergleichen. Da wirst du wohl kaum andere Methoden finden. Zu beachten wäre aber noch, dass man die Messung mehrmals wiederholen sollte und sich genau darüber im klaren ist, was denn sonst noch so alles im Hintergrund den Prozessor blockiert...

MfG Bischi

svetlana
27-11-2006, 08:25
Hallo zusammen,

danke für eure Hilfe.

Ich habe die Messungen in einer endlosen Schleife durchgeführt.
Ich habe auch festgestellt, dass der Aufruf von dieser Funktion in Java 5 mal länger dauert als in C, aber die gemessenen Werte in Java sind viel stabiller.

MfG
svetlana