clock() bzw. Altenative?
-
Hoi!
Gibts in Java eine Möglichkeit so ohne Weiteres die Rechenzeit für ein Programm zu bestimmen? Also sowas wie clock() in c/c++.
-
clock schrieb:
Hoi!
Gibts in Java eine Möglichkeit so ohne Weiteres die Rechenzeit für ein Programm zu bestimmen? Also sowas wie clock() in c/c++.
http://java.sun.com/javase/6/docs/api/java/lang/System.html#currentTimeMillis()
-
tfa schrieb:
clock schrieb:
Hoi!
Gibts in Java eine Möglichkeit so ohne Weiteres die Rechenzeit für ein Programm zu bestimmen? Also sowas wie clock() in c/c++.
http://java.sun.com/javase/6/docs/api/java/lang/System.html#currentTimeMillis()
Und wenn Du es noch genauer brauchst, dann gibt es da ab Java 5 auch noch eine Methode nanoTime oder so ähnlich.
-
Bei Performanz-Tests solltest Du die Methode System.nanoTime() benutzen. System.currentTimeMillis() hat eine schlechte Auflösung. Je nach Betriebssystem liefert diese Methode nur zwischen ca. 8 ms (MacOS) und 25 ms (Win98) einen neuen Wert zurück. Bei WinXP sinds ca. 15 ms.
Probiert es aus:
public class Performanz { public static void main(String[] args) { long start = System.currentTimeMillis(); while (System.currentTimeMillis()==start); long ende = System.currentTimeMillis(); System.out.println("Auflösung = "+(ende - start) + " ms"); } }
Der grobe Ablauf eines Performanztests sollte sein:
int numOfRuns = 100000; // je nach Laufzeit des zu testenden Algorithmus long start = System.nanoTime(); for (int run=0; run < numOfRuns ; run++) { // hier zu testende Methode aufrufen } long ende = System.nanoTime(); long mittel = (ende - start) / numOfRuns;
numOfRuns nie zu klein wählen. Die Laufzeiten schwanken pro Durchlauf stark. Schließlich läuft auch die JVM nur in einem Thread ab und bekommt vom Betriebssystem je nach Last mal mehr und mal weniger CPU-Zeit zugeteilt. Daher immer Mittelwerte bilden!
hope that helps.