HopelessFrag Geschrieben 30. Juli 2007 Geschrieben 30. Juli 2007 Hallo zusammen, für die Zeitmessung der Programmlaufzeit eines Programms versuche ich über ein Date-Objekt die Start und die End-Zeit des Programms zu speichern und am Ende voneinander zu subtrahieren. public class TestTime { private long startTime; private long endTime; private Date d = new Date(); public void startTimer() { startTime = d.getTime(); } public long endTimer() { endTime = d.getTime(); long endurance = endTime - startTime; return endurance; } } Start und Endzeit sind jedoch immer gleich! Auch wenn ich in der Implementierung der Methoden zwischen den beiden Aufrufen ein Thread.sleep(2000) setze. Woran kann das liegen? Danke und gruß, Benny Zitieren
P3AC3MAK3R Geschrieben 30. Juli 2007 Geschrieben 30. Juli 2007 Versuchs mal mit startTime = new Date().getTime(); und endTime = new Date().getTime(); Zitieren
HopelessFrag Geschrieben 30. Juli 2007 Autor Geschrieben 30. Juli 2007 Tatsächlich, es läuft. Aber woran liegt es, dass man zwei verschiedene Objekte erzeugen muss? Zitieren
P3AC3MAK3R Geschrieben 30. Juli 2007 Geschrieben 30. Juli 2007 Aus der API-Dokumentation: Date() Allocates a Date object and initializes it so that it represents the time at which it was allocated, measured to the nearest millisecond. Zitieren
speedi Geschrieben 6. August 2007 Geschrieben 6. August 2007 Ist wahrscheinlich mehr eine Glaubensfrage aber zum Messen von Programmlaufzeiten würde ich eher System.currentTimeMillis() verwenden. Einfach deshalb damit man nicht für jeden "Schiss" komplexe Objekte erzeugt. Ist wahrscheinlich in der heutigfen Zeit sowieso kein Problem mehr aber einfach eine Sache der Sauberkeit. Zitieren
ObiWanBelix Geschrieben 7. August 2007 Geschrieben 7. August 2007 Hallo, ich habe gerade den Thread gelesen und habe hierzu noch eine Frage. Ich kann mit der Antwort der API Dokumentation nichts anfangen und versuche das mal in meinen eigenen Worten zu schildern, falls das nicht richtig ist wäre es super wenn da jemand Licht ins dunkel biringt. Also durch private Date d = new Date(); wird ein Objekt d erstellt und mit startTime = d.getTime(); wird von startTime auf d referenziert.(Aus VB kenn ich das als ByRef) Wenn sich also d ändert (d.getTime()) dann wird auch der Wert in startTime geändert(ist ja kein Wert sondern nur eine Referenz). Ist ein = immer eine Referenzierung oder kann man in JAVA auch zwischen ByVal unde ByRef unterscheiden?? Danke Zitieren
kingofbrain Geschrieben 7. August 2007 Geschrieben 7. August 2007 Servus, Hallo, [...] Also durch private Date d = new Date(); wird ein Objekt d erstellt und mit startTime = d.getTime(); wird von startTime auf d referenziert.(Aus VB kenn ich das als ByRef) Das stimmt nicht ganz. Du referenzierst hier nicht, da getTime() einen primitiven long zurückliefert. Und der wird by Value zurückgeliefert. Deshalb kannst Du d ändern, wie Du willst, Dein startTime bleibt gleich. Ist ein = immer eine Referenzierung oder kann man in JAVA auch zwischen ByVal unde ByRef unterscheiden?? Danke Bei Java werden primitive Datentypen (z.B. int, boolean, double) by Value übergeben, alle Objekte by Reference. Wenn Du also ein Objekt hast, das Du übergibst oder zuweist, dann übergibst Du lediglich eine Referenz auf das Objekt. Im oberen Beispiel ist d eine Referenz auf ein Date-Objekt. Das in d enthaltene time-Attribut ist ein Primitive, deshalb wird es by Value verarbeitet. Ich hoffe, das hilft Dir weiter. Peter Zitieren
ObiWanBelix Geschrieben 7. August 2007 Geschrieben 7. August 2007 Hy kingofbrain, jetzt kapier ich es nicht mehr. Warum funktioniert dann das Beispiel von HopelessFrag nicht?? Hier werden doch die Werte by Value übergeben:confused: Somit sollten doch die 2 Variablen verschiedene Werte haben. Gruß Zitieren
geloescht_Newlukai Geschrieben 7. August 2007 Geschrieben 7. August 2007 Aber die beiden "by value"-Werte kommen vom gleichen Objekt. Wird ein Date-Objekt initialisiert, hält es die Zeit "fest" und ändert sich nicht mehr. Egal, wie oft man getTime() aufruft und unabhängig davon, welcher Variablen getTime() zugewiesen wird. Zitieren
ObiWanBelix Geschrieben 7. August 2007 Geschrieben 7. August 2007 Ahhhh Danke, dann versteh ich jetzt auch den Auszug aus der API Dokumentation. Hat also mit dem Object und der Zuweisung garnichts zu tun. Vielen Dank Zitieren
ObiWanBelix Geschrieben 7. August 2007 Geschrieben 7. August 2007 Ahhhh Danke, dann versteh ich jetzt auch den Auszug aus der API Dokumentation. Hat also mit dem Object und der Zuweisung garnichts zu tun. Vielen Dank Zitieren
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.