- Wie erhalte ich die Ausführungszeit einer Methode?
- Gibt es eine
Timer
Utility-Klasse für Dinge wie das Timing, wie lange eine Aufgabe dauert usw.?
Die meisten Suchanfragen bei Google geben Ergebnisse für Timer zurück, die Threads und Aufgaben planen, was ich nicht möchte.
Ich gehe mit der einfachen Antwort. Funktioniert bei mir.
long startTime = System.currentTimeMillis();
doReallyLongThing();
long endTime = System.currentTimeMillis();
System.out.println("That took " + (endTime - startTime) + " milliseconds");
Es funktioniert ganz gut. Die Auflösung ist offensichtlich nur auf die Millisekunde genau, das können Sie mit System.nanoTime() besser machen. Es gibt einige Einschränkungen für beide (Betriebssystem-Scheduler-Slices usw.), aber das funktioniert ziemlich gut.
Durchschnitt über ein paar Läufe (je mehr desto besser) und Sie bekommen eine anständige Vorstellung.
Verwenden Sofortig und Dauer aus der neuen API von Java 8,
Instant start = Instant.now();
Thread.sleep(5000);
Instant end = Instant.now();
System.out.println(Duration.between(start, end));
Ausgänge,
PT5S
Alle möglichen Wege an einem Ort versammelt.
Datum
Date startDate = Calendar.getInstance().getTime();
long d_StartTime = new Date().getTime();
Thread.sleep(1000 * 4);
Date endDate = Calendar.getInstance().getTime();
long d_endTime = new Date().getTime();
System.out.format("StartDate : %s, EndDate : %s \n", startDate, endDate);
System.out.format("Milli = %s, ( D_Start : %s, D_End : %s ) \n", (d_endTime - d_StartTime),d_StartTime, d_endTime);
System.aktuelleZeitMillis()
long startTime = System.currentTimeMillis();
Thread.sleep(1000 * 4);
long endTime = System.currentTimeMillis();
long duration = (endTime - startTime);
System.out.format("Milli = %s, ( S_Start : %s, S_End : %s ) \n", duration, startTime, endTime );
System.out.println("Human-Readable format : "+millisToShortDHMS( duration ) );
Für Menschen lesbar Format
public static String millisToShortDHMS(long duration) {
String res = ""; // java.util.concurrent.TimeUnit;
long days = TimeUnit.MILLISECONDS.toDays(duration);
long hours = TimeUnit.MILLISECONDS.toHours(duration) -
TimeUnit.DAYS.toHours(TimeUnit.MILLISECONDS.toDays(duration));
long minutes = TimeUnit.MILLISECONDS.toMinutes(duration) -
TimeUnit.HOURS.toMinutes(TimeUnit.MILLISECONDS.toHours(duration));
long seconds = TimeUnit.MILLISECONDS.toSeconds(duration) -
TimeUnit.MINUTES.toSeconds(TimeUnit.MILLISECONDS.toMinutes(duration));
long millis = TimeUnit.MILLISECONDS.toMillis(duration) -
TimeUnit.SECONDS.toMillis(TimeUnit.MILLISECONDS.toSeconds(duration));
if (days == 0) res = String.format("%02d:%02d:%02d.%04d", hours, minutes, seconds, millis);
else res = String.format("%dd %02d:%02d:%02d.%04d", days, hours, minutes, seconds, millis);
return res;
}
Guave: Google StoppuhrKRUG « Ein Ziel von Stopwatch ist es, die verstrichene Zeit in Nanosekunden zu messen.
com.google.common.base.Stopwatch g_SW = Stopwatch.createUnstarted();
g_SW.start();
Thread.sleep(1000 * 4);
g_SW.stop();
System.out.println("Google StopWatch : "+g_SW);
Apache Commons LangKRUG
« Stoppuhr
bietet eine bequeme API für Timings.
org.apache.commons.lang3.time.StopWatch sw = new StopWatch();
sw.start();
Thread.sleep(1000 * 4);
sw.stop();
System.out.println("Apache StopWatch : "+ millisToShortDHMS(sw.getTime()) );
JODA-ZEIT
public static void jodaTime() throws InterruptedException, ParseException{
java.text.SimpleDateFormat ms_SDF = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss.SSS");
String start = ms_SDF.format( new Date() ); // java.util.Date
Thread.sleep(10000);
String end = ms_SDF.format( new Date() );
System.out.println("Start:"+start+"\t Stop:"+end);
Date date_1 = ms_SDF.parse(start);
Date date_2 = ms_SDF.parse(end);
Interval interval = new org.joda.time.Interval( date_1.getTime(), date_2.getTime() );
Period period = interval.toPeriod(); //org.joda.time.Period
System.out.format("%dY/%dM/%dD, %02d:%02d:%02d.%04d \n",
period.getYears(), period.getMonths(), period.getDays(),
period.getHours(), period.getMinutes(), period.getSeconds(), period.getMillis());
}
Java-Datumszeit-API von Java 8 ” EIN Dauer Objekt repräsentiert einen Zeitraum zwischen zwei Sofortig Objekte.
Instant start = java.time.Instant.now();
Thread.sleep(1000);
Instant end = java.time.Instant.now();
Duration between = java.time.Duration.between(start, end);
System.out.println( between ); // PT1.001S
System.out.format("%dD, %02d:%02d:%02d.%04d \n", between.toDays(),
between.toHours(), between.toMinutes(), between.getSeconds(), between.toMillis()); // 0D, 00:00:01.1001
Frühlingsrahmen bietet Stoppuhr Hilfsklasse zum Messen der verstrichenen Zeit in Java.
StopWatch sw = new org.springframework.util.StopWatch();
sw.start("Method-1"); // Start a named task
Thread.sleep(500);
sw.stop();
sw.start("Method-2");
Thread.sleep(300);
sw.stop();
sw.start("Method-3");
Thread.sleep(200);
sw.stop();
System.out.println("Total time in milliseconds for all tasks :\n"+sw.getTotalTimeMillis());
System.out.println("Table describing all tasks performed :\n"+sw.prettyPrint());
System.out.format("Time taken by the last task : [%s]:[%d]",
sw.getLastTaskName(),sw.getLastTaskTimeMillis());
System.out.println("\n Array of the data for tasks performed « Task Name: Time Taken");
TaskInfo[] listofTasks = sw.getTaskInfo();
for (TaskInfo task : listofTasks) {
System.out.format("[%s]:[%d]\n",
task.getTaskName(), task.getTimeMillis());
}
Ausgang:
Total time in milliseconds for all tasks :
999
Table describing all tasks performed :
StopWatch '': running time (millis) = 999
-----------------------------------------
ms % Task name
-----------------------------------------
00500 050% Method-1
00299 030% Method-2
00200 020% Method-3
Time taken by the last task : [Method-3]:[200]
Array of the data for tasks performed « Task Name: Time Taken
[Method-1]:[500]
[Method-2]:[299]
[Method-3]:[200]
Verwenden Sie einen Profiler (JProfiler, Netbeans Profiler, Visual VM, Eclipse Profiler usw.). Sie erhalten die genauesten Ergebnisse und sind am wenigsten aufdringlich. Sie verwenden den integrierten JVM-Mechanismus für die Profilerstellung, der Ihnen bei Bedarf auch zusätzliche Informationen wie Stack-Traces, Ausführungspfade und umfassendere Ergebnisse liefern kann.
Wenn Sie einen vollständig integrierten Profiler verwenden, ist es ziemlich trivial, eine Methode zu profilieren. Rechtsklick, Profiler -> Zu Root-Methoden hinzufügen. Führen Sie dann den Profiler genauso aus wie einen Testlauf oder Debugger.
Die JAMon-API ist eine kostenlose, einfache, leistungsstarke, Thread-sichere Java-API, mit der Entwickler die Leistung und Skalierbarkeit von Produktionsanwendungen einfach überwachen können. JAMon verfolgt Hits, Ausführungszeiten (gesamt, durchschnittlich, min, max, std dev) und mehr. http://jamonapi.sourceforge.net/ herunterladen : http://sourceforge.net/project/showfiles.php?group_id=96550
– Mike Pone
7. Oktober 2008 um 21:47 Uhr
Vielleicht möchten Sie sich auch die ansehen Apache Commons Lang Stoppuhr Klasse. Eine einfache, aber nützliche Utility-Klasse.
– Benutzer101561
5. Mai 2009 um 13:10 Uhr
Später ähnliche Frage: Wie schreibe ich einen korrekten Micro-Benchmark in Java?
– Basilikum Bourque
1. Juli 2016 um 22:48 Uhr
Ja, StopWatch ist dafür großartig.
– Shubham Pandey
1. August 2019 um 6:08 Uhr
Java 8 verwenden
Instant
Klasse: stackoverflow.com/a/30975902/1216775– akhil_mittal
1. August 2019 um 11:36 Uhr