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.
Ich denke nicht, dass Stoppuhr-Benchmarking zu schrecklich ist, aber wenn Sie auf einen Solaris- oder OS X-Computer zugreifen können, sollten Sie sich DTrace ansehen. Ich habe es verwendet, um einige großartige Informationen zum Timing in meinen Anwendungen zu erhalten.
quelle
Ich verwende immer Stoppuhr-Benchmarking, da es so viel einfacher ist. Die Ergebnisse müssen für mich allerdings nicht sehr genau sein. Wenn Sie genaue Ergebnisse benötigen, sollten Sie kein Stoppuhr-Benchmarking verwenden.
quelle
Das mache ich die ganze Zeit. Ich würde viel lieber einen Profiler verwenden, aber der Anbieter der domänenspezifischen Sprache, mit der ich arbeite, bietet keinen an.
quelle