Methoden Stopwatch misst Zeit einer Methode nicht

HTC

Mitglied
Ich versuche im Moment 2 Methoden miteinander zu vergleichen.

Die Methoden sind wie folgt aufgebaut

Methode 1

public static int[] Methodennahme1(int[] Array)

Methode 2

public static int[] Methodenname2(int Array[], int Wert1, int Wert2)


Methode 2 ruft innerhalb ihrer Methode nochmal eine Methode auf.

Ich versuche mit Hilfe der Klasse Stopwatch die Laufzeit zu messen.

Java:
public class StopWatch {

  private long startTime = 0;
  private long stopTime = 0;
  private boolean running = false;


  public void start() {
    this.startTime = System.currentTimeMillis();
    this.running = true;
  }


  public void stop() {
    this.stopTime = System.currentTimeMillis();
    this.running = false;
  }


  //elaspsed time in milliseconds
  public long getElapsedTime() {
    long elapsed;
    if (running) {
      elapsed = (System.currentTimeMillis() - startTime);
    }
    else {
      elapsed = (stopTime - startTime);
    }
    return elapsed;
  }


  //elaspsed time in seconds
  public long getElapsedTimeSecs() {
    long elapsed;
    if (running) {
      elapsed = ((System.currentTimeMillis() - startTime) / 1000);
    }
    else {
      elapsed = ((stopTime - startTime) / 1000);
    }
    return elapsed;
  }
}

Für Methode 1 bekomme ich einen Wert zurück geliefert. Methode 2 liefert mir immer 0 zurück.
Java:
 StopWatch messung1 = new StopWatch();
	        messung1.start();
	        Methodennahme1(Array);
	        messung1.stop();


Java:
StopWatch messung2 = new StopWatch();
	        messung2.start();
	        Methodennahme2(Array, wert 1, wert2);
	        messung2.stop();

Dann erfolgt jeweils die Ausgabe. Warum liefert mir Methode2 immer 0 zurück?
 

Kevin94

Top Contributor
Was du versuchst nennt sich Microbenchmarking und ist absolut sinnlos. Wenn die zu untersuchenden Methoden nicht gerade Netzwerk-IO oder eine langen (mathematischen) Algorithmus enthalten, dürften die Werte fast immer 0 sein, da auf einem heutigen Rechner kaum noch Dinge 1ms brauchen. Selbst wenn du in ns messen würdes, würde es wenig bringen (Die Auflösung von System.nanoTime() beträgt übrigens systemabhängig >>15ns, auf Windoof teilweise 400ns afaik). Sinnvoll und aussagekräftig wird es frühestens, wenn du zwischen den Zeitmessungen die Methode in ein Schleife >>100.000 mal aufrufst.
 

HTC

Mitglied
In den Methoden werden Arrays ein und ausgelesen.
Methode 1 liefert mir je nach Anzahl der Objekte in den Arrays 6ms und 1500ms zurück.

Es geht nur darum einen groben Überblick zu bekommen welche Methode schneller ist.
 

Kevin94

Top Contributor
Wie eingelesen? generell kann man eigentlich sagen, das solches Fein-Tuning den Aufwand nicht Wert ist, da muss man schon sehr viel Mist gebaut haben. Oder um es mit der Signatur eines anderen Forumsmitglieds zu sagen:
There are two rules for optimization: 1) Don't do it 2) (For experts only) Don't do it yet
 

HTC

Mitglied
Array wird mit einer Methode erzeugt. Danach gibt es 2 verschiedene Arten der Berechnung einmal Methode 1 und einmal Methode 2.
 

Bernd Hohmann

Top Contributor
In den Methoden werden Arrays ein und ausgelesen.
Methode 1 liefert mir je nach Anzahl der Objekte in den Arrays 6ms und 1500ms zurück.

Es geht nur darum einen groben Überblick zu bekommen welche Methode schneller ist.

Offensichtlich ist dann Methode 2 schneller als Methode 1 wenn 1 zwischen 6-1500ms und 2 0ms zurückliefert.

Ansonsten kannst Du dich an den Nanosekunden vergreifen:

Java:
long time=System.nanoTime();
Methodennahme2(Array, wert 1, wert2);
System.out.println(System.nanoTime()-time);

Bernd
 
B

bone2

Gast
wire wäre es mal mit nem syso auf starttime und stoptime, dann siehst du das die zeit wahrscheinlich immernoch die gleiche ist
 

HTC

Mitglied
Danke für den Tipp mit time=System.nanoTime();
Da liefert er mir 414945000ns was 415,831 Millisekunden [ms] entspräche

Könnte es sein, dass die hinteren 3 Nullen wegmüssen ?
Wären dann 0,415831 Millisekunden [ms] was dafür spreche würde, dass bei Millisekunden sonst kein Wert zurück gegeben würde.
 

Bernd Hohmann

Top Contributor
Je nach Betriebssystem und Kernel wird höher aufgelöst:

Java:
long time = System.nanoTime();
Thread.sleep(1);
System.out.println(System.nanoTime() - time);
1105604

Das ist 1 Milisekunde in Nanos bei mir - plus den Latenzen vom Getter und System.out.println(...).

Trotzdem: weder sleep(..) noch nanoTime(..) sind bis auf die letzte Stelle präzise.

Bernd
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
N Ich kriege ganze zeit die Fehlermeldung "Inhalt der Zwischenablage kann nicht in die ausgewählten Elemente eingefügt werden" hat jemand eine Lösung? Java Basics - Anfänger-Themen 6
S Wie Rechne ich die Zeit in ...L um? Java Basics - Anfänger-Themen 15
I Zahl aufrunden (Zeit) Java Basics - Anfänger-Themen 43
H Primzahlen finden - Zeit optimieren Java Basics - Anfänger-Themen 34
B Prüfen, ob Zeit Überschreitung Java Basics - Anfänger-Themen 2
I Nächstmögliche Zeit erhalten Java Basics - Anfänger-Themen 11
hello_autumn Zeit messen von ausgeführten Tools. Java Basics - Anfänger-Themen 1
B Nächster möglicher Tag bekommen / Nächste mögliche Zeit bekommen Java Basics - Anfänger-Themen 24
Y Warum aktualisiert die Zeit nicht? Java Basics - Anfänger-Themen 4
J Aktuelle Zeit in einer JavaFX Anwendung aktualisieren lassen Java Basics - Anfänger-Themen 4
S JButton soll für bestimmte Zeit verschwinden Java Basics - Anfänger-Themen 5
F actionPerformed() zur richtigen Zeit Java Basics - Anfänger-Themen 6
T Erste Schritte Schreiben Sie eine Klasse Zeit, die eine Zeitdauer in Minuten beschreibt. Die Anzahl Minuten verwalt Java Basics - Anfänger-Themen 3
F Zeit in Milli bis Mitternacht Java Basics - Anfänger-Themen 20
M Messandwendung nach Zeit und eigener Eingabe Java Basics - Anfänger-Themen 4
J Java Datum- Zeit Differenz bilden! Java Basics - Anfänger-Themen 4
N Server Zeit zur lokalen Zeit setzen. Java Basics - Anfänger-Themen 0
K Eine bestimmte Zeit, eine Schleife laufen lassen. Java Basics - Anfänger-Themen 4
N Zeit berechnen, die für eine Strecke benötigt wird Java Basics - Anfänger-Themen 3
S Threads Zu bestimmer Zeit Screenshot erstellen. Java Basics - Anfänger-Themen 2
M Zahlen verändern nach Zeit Java Basics - Anfänger-Themen 6
E Zeit zum bestimmten Datum in millisekunden berechnen Java Basics - Anfänger-Themen 5
K Zeit auslesen von Timeserver einen Tag daneben Java Basics - Anfänger-Themen 11
S Zeit messe? Java Basics - Anfänger-Themen 8
L Zeit sekündlich aktualisieren Java Basics - Anfänger-Themen 7
S Zeit bestimmen Java Basics - Anfänger-Themen 4
E Algorithmen und Programmierung - Datum und Zeit ausgeben? Java Basics - Anfänger-Themen 8
J Aufgabe: Zeit in Sekunden Java Basics - Anfänger-Themen 9
F Einfache Klassen für Datum und Zeit Java Basics - Anfänger-Themen 3
K Zeit ablaufen lassen und nach Ablauf beenden Java Basics - Anfänger-Themen 5
M Zeit von microsekunden auf Format mm:ss Java Basics - Anfänger-Themen 13
G Methoden Zeit Umrechnungsfaktor Java Basics - Anfänger-Themen 2
M Reaktion auf bestimmte Zeit Java Basics - Anfänger-Themen 2
S Animation nach bestimmter Zeit ausführen Java Basics - Anfänger-Themen 3
F hat jmd Zeit mir bisschen zu helfen msn/skype Java Basics - Anfänger-Themen 10
R Kalender speichert keine Zeit Java Basics - Anfänger-Themen 2
F Zeit per Array "zurückdrehen" Java Basics - Anfänger-Themen 5
R Zeit kommt mir zu lange vor... Java Basics - Anfänger-Themen 7
C Ereignis nach einer gewissen Zeit Java Basics - Anfänger-Themen 10
C Falsche Zeit Java Basics - Anfänger-Themen 2
A Unix-Zeit verkürzen Java Basics - Anfänger-Themen 2
Z JScrollPane zeigt Zeit als Datum Java Basics - Anfänger-Themen 5
H Programm zu bestimmten Zeit ausführen Java Basics - Anfänger-Themen 3
R Stoppuhr: Zeit ermitteln und übergeben - Variable static?? Java Basics - Anfänger-Themen 6
G Umrechnung Zeit/Temperatur Java Basics - Anfänger-Themen 6
Luk10 Zeit-Aspekt in Java Java Basics - Anfänger-Themen 3
N zeit ausgeben Java Basics - Anfänger-Themen 5
C countdown/timer/Zeit warten lassen Java Basics - Anfänger-Themen 14
S Dynamisch Zeit auslesen Java Basics - Anfänger-Themen 11
X Fibonacci mit durchschnittlicher Zeit Java Basics - Anfänger-Themen 5
S Kennt jemand die Default-Cache Zeit beim Java-Plugin? Java Basics - Anfänger-Themen 2
M Zeitdauer-Klasse (zeit in java) Java Basics - Anfänger-Themen 9
1 Zeit und Datum der Letzten Bearbeitung einer Datei auslesen Java Basics - Anfänger-Themen 3
L Zeit stoppen in mehreren Threads Java Basics - Anfänger-Themen 2
B JFrame nur eine gewisse Zeit anzeigen Java Basics - Anfänger-Themen 3
R Zeit eingeben über Formular Java Basics - Anfänger-Themen 3
D Kann man die Bios Zeit auslesen? Java Basics - Anfänger-Themen 5
G Zeit-Funktion Java Basics - Anfänger-Themen 4
D Zeit Problem! Java Basics - Anfänger-Themen 8
M Zeit zurückgeben je sekunde Java Basics - Anfänger-Themen 8
F Zeit stoppen Java Basics - Anfänger-Themen 6
C Zeitberechnungen wieviel Zeit vergangen ist. Java Basics - Anfänger-Themen 4
J System Zeit Java Basics - Anfänger-Themen 3
D Zeit messen Java Basics - Anfänger-Themen 7
M Faktor Zeit in Java! Gibt es sowas? Java Basics - Anfänger-Themen 6
H Reaktion nach gewisser Zeit Java Basics - Anfänger-Themen 20
S Zeit berechnen Java Basics - Anfänger-Themen 6
C Zeit horchen! Java Basics - Anfänger-Themen 3
G Programm soll nach bestimmter Zeit etwas tun Java Basics - Anfänger-Themen 24
P Zeit - Thread bei Simulationen Java Basics - Anfänger-Themen 4
H TicTacToe: Zeit zwischen Zügen lassen Java Basics - Anfänger-Themen 9
C Zeit Schleife Java Basics - Anfänger-Themen 5
S Zeit messen! Java Basics - Anfänger-Themen 12
S CPU Zeit Java Basics - Anfänger-Themen 8
P Aktuelles Datum/Zeit in GMT? Java Basics - Anfänger-Themen 2
E Zeit runterlaufen lassen Java Basics - Anfänger-Themen 2
G Zeit auslesen in bestimmtem Format Java Basics - Anfänger-Themen 2
D String in Zeit umwandeln? Java Basics - Anfänger-Themen 3
G zeit subtrahieren Java Basics - Anfänger-Themen 6
E Nach einer gewissen Zeit wiederholen Java Basics - Anfänger-Themen 13
TRunKX Probleme mit der Zeit (Stunden Sekunden) Java Basics - Anfänger-Themen 7
W Zeit Variablen? Java Basics - Anfänger-Themen 6
S GregorianCalendar - Vergangene Zeit Java Basics - Anfänger-Themen 17
G Auf eine Uhrzeit xx Minuten addieren u. mit Akt. Zeit vergl. Java Basics - Anfänger-Themen 5
G Zeit im 24 Stundenrhythmus Java Basics - Anfänger-Themen 3
G Methode nach bestimmter Zeit aufrufen Java Basics - Anfänger-Themen 3
H GregorianCalendar Zeit abziehen (Countup) Java Basics - Anfänger-Themen 9

Ähnliche Java Themen

Neue Themen


Oben