Ich weiß nicht, ob jemand Parameter empfehlen könnte, die tatsächlich so nah sind, wie Sie vielleicht brauchen - wahrscheinlich nicht einmal die Jungs, die das Werkzeug geschrieben haben. Dies ist sehr spezifisch für den Anwendungsfall, den Sie testen, das Betriebssystem, die JVM, etc.
Ich persönlich mache es ein paar Mal mit verschiedenen Parametern und erfassen Sie das Ergebnis jedes Mal, so dass ich es analysieren konnte. Sie haben einige Fehler +/- (für die durchschnittliche Zeit mindestens) Feld, das ist meine erste Angabe. Wenn es zu groß ist (und das würdest du bestimmen), erhöhe ich normalerweise die Werte @Warmup
und @Measurement
; das ist keine goldene Regel, aber das ist was ich tue. Hier ist ein Beispiel verwende ich:
@BenchmarkMode(Mode.AverageTime)
@OutputTimeUnit(TimeUnit.NANOSECONDS)
@Warmup(iterations = 5, time = 2, timeUnit = TimeUnit.SECONDS)
@Measurement(iterations = 5, time = 2, timeUnit = TimeUnit.SECONDS)
@State(Scope.Thread)
Ich könnte erhöhen die iterations
und time
nach und nach, um zu sehen, ob ich nahezu konstante Ergebnisse mit früheren Läufen erhalten.
Normalerweise lasse ich alle Benchmarks unter dem gleichen Aufwärmprogramm laufen, so dass die Ergebnisse nicht davon beeinflusst werden.
Die Sache, die Sie hier bekommen, ist, dass Sie gute oder schlechte Ergebnisse bekommen, oder langsam und schnell - aber das ist nur die Ausgabe, nicht der Grund. Versteht den Grund und jmh
unter perfasm
oder xperfasm
und viele andere Profiler läuft, ist eine ganz andere Küche, weg von meiner Liga ...