Stoppuhr-Benchmarking ist in Ordnung, vorausgesetzt, Sie messen genügend Iterationen, um sinnvoll zu sein. Normalerweise benötige ich eine verstrichene Gesamtzeit von einigen einstelligen Sekunden. Andernfalls werden Ihre Ergebnisse durch die Planung und andere Betriebsunterbrechungen Ihres Prozesses leicht erheblich verzerrt.
Dafür verwende ich ein paar statische Methoden, die ich vor langer Zeit erstellt habe und auf denen sie basieren System.currentTimeMillis()
.
Für die Profilerstellung habe ich jProfiler einige Jahre verwendet und fand es sehr gut. Ich habe kürzlich YourKit durchgesehen , was auf der Website großartig zu sein scheint, aber ich habe es persönlich überhaupt nicht verwendet.
Um die Frage nach Planungsunterbrechungen zu beantworten, stelle ich fest, dass wiederholte Läufe, bis Konsistenz / Beobachtung erreicht ist, in der Praxis dazu beitragen, anomale Ergebnisse aus der Prozessplanung auszusortieren. Ich finde auch, dass die Thread-Planung für Läufe zwischen 5 und 30 Sekunden keine praktischen Auswirkungen hat. Nachdem Sie die Schwellenwertplanung für einige Sekunden überschritten haben, hat dies meiner Erfahrung nach einen vernachlässigbaren Einfluss auf die Ergebnisse. Ich stelle fest, dass ein 5-Sekunden-Lauf im Durchschnitt den gleichen Wert wie ein 5-Minuten-Lauf für Zeit / Iteration aufweist.
Möglicherweise möchten Sie den getesteten Code auch etwa 10.000 Mal vorab ausführen, um die JIT "aufzuwärmen", je nachdem, wie oft Sie erwarten, dass der getestete Code im wirklichen Leben im Laufe der Zeit ausgeführt wird.