2010-01-05 5 views
3

Existe-t-il une bonne bibliothèque Java permettant de créer de bons micro-benchmarks? Je pense à quelque chose qui peut fournir (avec un minimum de tracas) fournir des résultats de texte (CSV ou HTML, faites votre choix) et peut-être des graphiques résumant les résultats. Idéalement, ce devrait être quelque chose qui fonctionne bien avec JUnit ou équivalent, et devrait être simple à configurer des benchmarks avec des paramètres variables.Bibliothèque de microbenchmark légère avec sortie graphique (Java)

J'ai regardé japex, mais l'ai trouvé trop lourd (25 MB de bibliothèques pour inclure ?!) et franchement c'était juste une douleur de travailler avec. Documentation quasiment inexistante, utilisation de fourmis, XML et chemins ...

Répondre

4

Quelques-uns d'entre nous de l'équipe Google Collections sont dans les premiers jours de construire quelque chose qui répond à vos besoins. Voici le code pour mesurer combien de temps foo() prend:

public class Benchmark1 extends SimpleBenchmark { 
    public void timeFoo(int reps) { 
    for (int i = 0; i < reps; i++) { 
     foo(); 
    } 
    } 
} 

Ni l'API ni l'outil lui-même est particulièrement stable. Nous ne sommes même pas prêts à recevoir des rapports de bug ou des demandes de fonctionnalités! Si je ne vous ai pas encore effrayé, je vous invite à faire un tour avec le Caliper.

+0

Même dans les premiers jours, je peux voir que c'est beaucoup mieux que le japex. Je vais le prendre pour un tour, et probablement écrire mes repères pour être facilement adapté à cela quand il est terminé. Preuve (encore une fois) que tout ce que Sun peut faire, les codeurs de Google peuvent faire mieux dans leur temps de 20%? – BobMcGee

+1

c'était la frustration avec japex qui nous a d'abord mis sur la voie du développement de l'étrier. :) –

+0

J'étais sur le point de faire la même chose ... ça me fait plaisir de poser la question, puisque votre version est plus élégante que la mienne. Je vais encore devoir adapter les choses un peu pour tenir compte de tous les différents paramètres (et peut-être mettre en forme un peu plus pour mon cas spécifique - MB/s avec un nombre variable d'octets, plutôt qu'une taille de répétition spécifique). Mais encore, des économies de temps massives! Massif! – BobMcGee

1

Oracle a maintenant JMH. Non seulement est-il écrit par les membres de l'équipe JIT (qui enlèveront une grande partie de la tâche d'écrire de bons micro-benchmarks), mais il a également d'autres fonctionnalités comme les profilers connectables (y compris ceux qui imprimeront l'assemblage de vos hotspots avec en ligne).

Imprime des tableaux. Pas sûr de graphiques. Les benchmarks peuvent être configurés avec des paramètres variables. La documentation est assez bonne.

Il est facile à mettre en place et à démarrer. Je l'ai intégré à JUnit, mais les développeurs fournissent un archétype Maven pour commencer.

Questions connexes