Zusätzlich zu den anderen ausgezeichneten Ratschlägen würde ich auch auf Folgendes achten:
Bei einigen CPUs (z. B. der Intel Core i5-Reihe mit TurboBoost) wirkt sich die Temperatur (und die Anzahl der derzeit verwendeten Kerne sowie deren prozentuale Auslastung) auf die Taktrate aus. Da CPUs dynamisch getaktet werden, kann dies Ihre Ergebnisse beeinflussen. Wenn Sie beispielsweise eine Single-Thread-Anwendung haben, ist die maximale Taktrate (mit TurboBoost) höher als bei einer Anwendung, die alle Kerne nutzt. Dies kann daher auf einigen Systemen den Vergleich von Single- und Multi-Thread-Leistung beeinträchtigen. Denken Sie daran, dass auch die Temperatur und die Volatilität Einfluss darauf haben, wie lange die Turbofrequenz aufrechterhalten wird.
Ein vielleicht noch wichtigerer Aspekt, auf den Sie direkten Einfluss haben: Stellen Sie sicher, dass Sie das Richtige messen! Zum Beispiel, wenn Sie Folgendes verwenden System.nanoTime()
um ein bestimmtes Stück Code zu bewerten, platzieren Sie die Aufrufe der Zuweisung an sinnvollen Stellen, um zu vermeiden, dass Dinge gemessen werden, an denen Sie nicht interessiert sind. Zum Beispiel, tun Sie das nicht:
long startTime = System.nanoTime();
//code here...
System.out.println("Code took "+(System.nanoTime()-startTime)+"nano seconds");
Das Problem ist, dass Sie nicht sofort die Endzeit erhalten, wenn der Code beendet ist. Versuchen Sie stattdessen das Folgende:
final long endTime, startTime = System.nanoTime();
//code here...
endTime = System.nanoTime();
System.out.println("Code took "+(endTime-startTime)+"nano seconds");
0 Stimmen
Siehe [diese Frage][1] von vor ein paar Minuten für einige verwandte Informationen. edit: Entschuldigung, dies sollte keine Antwort sein. Ich hätte es als Kommentar posten sollen. [1]: stackoverflow.com/questions/503877/
0 Stimmen
Nachdem ich vorhatte, den Fragesteller auf eine Frage wie diese zu verweisen, stellte ich fest, dass es diese Frage nicht gab. Hier ist sie also, und hoffentlich werden im Laufe der Zeit einige gute Tipps gesammelt.
6 Stimmen
Java 9 könnte einige Funktionen für Micro-Benchmarking bieten: openjdk.java.net/jeps/230
3 Stimmen
@Raedwald Ich denke, dass JEP darauf abzielt, dem JDK-Code einige Mikro-Benchmarks hinzuzufügen, aber ich glaube nicht, dass jmh im JDK enthalten sein wird...
0 Stimmen
Wahrscheinlich ein Duplikat: Wie kann ich die Ausführung einer Methode in Java zeitlich festlegen?
2 Stimmen
@Raedwald Hallo aus der Zukunft. Er hat es nicht in die Auswahl geschafft .
1 Stimmen
Voir : JMH, ein Java-Harness zum Erstellen, Ausführen und Analysieren von Nano-, Mikro-, Milli- und Makro-Benchmarks y JEP 230: Mikrobenchmark-Suite und doppelte Frage Bester Ansatz für den Umgang mit Zeitmaßnahmen? .