955 votes

Comment écrire un micro-benchmark correct en Java?

Comment écrire (et exécuter) un micro-benchmark correct en Java?

Je cherche ici des exemples de code et des commentaires illustrant diverses choses à penser.

Exemple: Le benchmark doit-il mesurer le temps / l'itération ou les itérations / le temps, et pourquoi?

En relation: L'analyse comparative du chronomètre est-elle acceptable?

256voto

Pangea Points 36713

Je sais que cette question a été marquée comme une réponse, mais je tiens à mentionner cette nouvelle librairie microbenchmarking de Google appelée Caliper

Démarrer des tutoriels

  1. http://codingjunkie.net/micro-benchmarking-with-caliper/
  2. http://vertexlabs.co.uk/blog/caliper

93voto

Jon Skeet Points 692016

Les choses importantes pour Java de référence sont:

  • Réchauffer l'équipe première en exécutant le code plusieurs fois avant de calendrier, il
  • Assurez-vous que vous exécutez pour assez longtemps pour être en mesure de mesurer les résultats en quelques secondes ou (mieux), les dizaines de secondes
  • Si vous ne pouvez pas appeler System.gc() entre les itérations, c'est une bonne idée pour l'exécuter entre les essais, de sorte que chaque test espérons obtenir un "nettoyage" de la mémoire de l'espace pour travailler avec. (Oui, gc() est plus d'une indication que comme une garantie, mais il est très probable qu'il aura vraiment des ordures recueillir dans mon expérience.)
  • J'aime affichage d'itérations et de temps, et une vingtaine de fois/itération qui peut être mis à l'échelle, tels que les "meilleurs" algorithme obtient un score de 1.0 et les autres sont notés dans un relatif de la mode. Cela signifie que vous pouvez exécuter tous les algorithmes pour un assez long temps, variable à la fois le nombre d'itérations et le temps, mais toujours obtenir des résultats comparables.

Je suis juste dans le processus de création de blogs à propos de la conception d'un référentiel .NET. J'ai un couple de messages antérieurs qui peut être en mesure de vous donner quelques idées - tout ne sera le cas, bien sûr, mais certaines d'entre elles peuvent être.

49voto

assylias Points 102015

jmh est un ajout récent à OpenJDK et a été écrit par certains de rendement des ingénieurs de l'Oracle. Certainement la peine d'avoir un coup d'oeil.

La jmh est un Java harnais pour la construction, l'exécution et l'analyse des nano/micro/macro repères écrit en Java et d'autres langages de cibler la JVM.

Très intéressant morceaux de l'information enfouie dans l'exemple de tests de commentaires.

J'ai écrit détaillé de la procédure d'installation de Netbeans (qui est sans doute aujourd'hui obsolète).

23voto

Peter Lawrey Points 229686
<blockquote> <p>Devez le benchmark mesurer temps/itération ou itérations/heure et pourquoi ?</p> </blockquote> <p>Cela dépend de ce que vous essayez de tester. Si vous êtes intéressé de latence, utilisez si vous êtes intéressé par itérations/durée d’utilisation de débit et temps/itération.</p>

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X