53 votes

Quelle est la meilleure macro-outil d'analyse comparative / cadre pour la mesure d'un seul thread complexe algorithme en Java?

Je veux faire quelques mesures de la performance (principalement runtime) pour mon code Java, un seul thread, local, algorithme complexe. (Donc je ne veux pas d'une macro-indice de référence à la mesure d'une JVM.)

Avec cet outil, je voudrais

  • analyser la complexité, c'est à dire voir comment mon code échelles pour un paramètre n (la profondeur de la recherche). (J'ai déjà un test junit paramétrée dans n.)
  • faire quelques analyses de tendance à être prévenu si la modification de la base de code rend le code plus lent.

Pour cela, je voudrais utiliser un outil ou un cadre

  • la statistique, de façon optimale le calcul de la valeur moyenne, l'écart type et l'intervalle de confiance. C'est très important.
  • peut être paramétrée (voir paramètre n ci-dessus). C'est également très important.
  • est capable de produire une fantaisie de la parcelle serait bien, mais n'est pas obligatoire
  • peut être utilisé dans un système automatisé (junit-)test à m'avertir si mon programme ralentit fait, mais ce n'est pas obligatoire, juste un plus.

Quels sont les outils/frameworks de répondre à ces exigences? Ce qui serait bien adapté à la complexité et à l'analyse des tendances, et pourquoi?

67voto

DaveFar Points 3360

Ci-dessous est une liste alphabétique de tous les outils que j'ai trouvé. Les aspects mentionnés sont:

  • est-il facilement paramétrable
  • c'est une bibliothèque Java ou au moins facilement intégrable dans votre programme Java
  • peut-il manipuler JVM micro-analyse comparative, par exemple l'utilisation d'une phase d'échauffement
  • peut-il tracer les résultats visuellement
  • peut-il stocker les valeurs mesurées de façon persistante
  • peut-elle faire l'analyse des tendances pour l'avertir qu'un nouveau commit causé un ralentissement de la
  • est-il fournir et utiliser des statistiques (au moins max, min, moyenne et écart-type).

Auto-pilote

paramétrable; bibliothèque Perl; pas de JVM micro-analyse comparative; tracé; la persistance; l'analyse de la tendance!?; de bonnes statistiques (exécuter un test donné, jusqu'à ce que les résultats de stabiliser; la mise en lumière des valeurs aberrantes).

L'analyse comparative du cadre

pas paramétrable; bibliothèque Java; JVM micro-analyse comparative; pas de traçage; pas de persistance; aucune analyse des tendances; statistiques.

Les statistiques extrêmement bien: en plus de la moyenne, max, min et l'écart-type, il calcule également les 95% intervalle de confiance (par l'intermédiaire de l'amorçage) et de la corrélation en série (par exemple, afin de les avertir oscillant temps d'exécution, ce qui peut se produire si votre programme se comporte de nondeterministically, par exemple, parce que vous utilisez HashSets). Il décide de la façon dont souvent le programme doit être réitéré pour obtenir des mesures précises et interprète pour le reporting et mises en garde (par exemple sur des valeurs aberrantes et de la corrélation en série).

Aussi ne la micro-analyse comparative très bien (voir Créer rapidement/référence fiable avec java? pour plus de détails).

Malheureusement, le cadre est livré dans un util-package livré avec beaucoup d'autres helper classes. L'indice de référence des classes dépendent de JSci (Une science de l'API pour Java) et Mersenne Twister (http://www.cs.gmu.edu/~sean/recherche/). Si l'auteur, Brent Boyer, trouve le temps, il va bouillir la bibliothèque et ajoutez une simple grapher, de sorte que l'utilisateur peut effectuer une inspection visuelle des mesures, par exemple pour les corrélations et les valeurs aberrantes.

Étrier

paramétrable; bibliothèque Java; JVM micro-analyse comparative; tracé; la persistance; aucune analyse des tendances; statistiques.

Relativement nouveau projet, conçu pour les applications Android. L'air jeune, mais prometteur. Dépend de Google Goyave :(

Communes de surveillance

pas paramétrable!?; Bibliothèque Java; pas de JVM micro benchmarking!?; traçage; la persistance à travers une servlet; aucune analyse des tendances!?; pas de statistiques!?.

Prend en charge AOP de l'instrumentation.

JAMon

pas paramétrable; bibliothèque Java; pas de JVM micro-analyse comparative; de traçage, de la persistance et de l'analyse de la tendance avec des outils supplémentaires (Jarep ou JMX); statistiques.

Un bon suivi, entrelacés avec log4j, les données peuvent aussi être accédés par programmation ou de mise en question et votre programme peut prendre des mesures sur les résultats.

Java Simon

pas paramétrable!?; Bibliothèque Java; pas de JVM micro-analyse comparative; traçage seulement avec Jarep; la persistance seulement avec JMX; aucune analyse des tendances; pas de statistiques!?.

Concurrent de Jamon, prend en charge une hiérarchie des moniteurs.

JETM

pas paramétrable; bibliothèque Java; JVM micro-analyse comparative; tracé; la persistance; aucune analyse des tendances; pas de statistiques.

Nice léger de surveillance d'outil, pas de dépendances :) N'offre pas suffisamment de statistiques (aucun écart-type), et d'étendre le plugIn en conséquence semble assez difficile (Agrégateurs et les Agrégats seulement ont fixé des getters pour min, max et moyenne).

jmeter

paramétrable!?; bibliothèque java; pas de JVM micro benchmarking!?; traçage; persistance; l'analyse de la tendance!?; les statistiques!?.

Bon suivi de la bibliothèque qui est adapté vers le test de charge des applications web.

Java Microbenchmark Harnais (jmh)

paramétrable (personnalisé invocateurs via l'API Java); bibliothèque Java; JVM microbenchmarking; pas de parcelles; pas de persistance; aucune analyse des tendances; statistiques.

L'analyse comparative des harnais construit par Oracle HotSpot experts, donc très approprié pour microbenchmarking sur HotSpot, utilisé dans OpenJDK performance de travail. Extrême mesures sont prises pour assurer la fiabilité d'analyse comparative de l'environnement. En plus lisible de sortie, jmh fournit une API Java pour traiter les résultats, par exemple pour la 3e partie de traceurs et les fournisseurs de persistance.

junit-Repères

paramétrable; bibliothèque Java; JVM micro-analyse comparative; tracé; la persistance (utilisation de la CONSOLE, XML ou de la base de données H2); graphique de l'analyse des tendances; statistiques (max, min, moyenne, écart-type; mais pas facilement extensible pour plus de statistiques).

Il suffit d'ajouter un junit-4-règle à votre junit tests :)

junit-Repères est open source, sous licence Apache 2.

junitperf

Principalement pour faire de l'analyse de tendance pour les performances (avec le test JUnit décorateur TimedTest) et l'évolutivité (avec le test JUnit décorateur LoadTest).

paramétrable; bibliothèque Java; pas de JVM micro-analyse comparative; pas de traçage; pas de persistance; pas de statistiques.

perf4j

pas paramétrable; bibliothèque Java; pas de JVM micro-analyse comparative; tracé; la persistance via JMX; l'analyse des tendances par l'intermédiaire d'un log4j appender; statistiques.

S'appuie sur une structure de journalisation, pouvez utiliser l'AOP.

Projet De Broadway

Très concept général: les moniteurs d'observer les conditions prédéfinies et de spécifier comment réagir lorsqu'elles sont respectées.

speedy-mcbenchmark

L'accent principal est sur parameterizability: vérifiez si votre algorithme échelles, c'est à dire vérifier si il est O(n), O(n log(n)), O(n2)...

bibliothèque java; JVM micro-analyse comparative; pas de complot; la persistance; l'analyse des tendances; pas de statistiques.

Le Broyeur

paramétrable; Jython bibliothèque; pas de JVM micro-analyse comparative; tracé; la persistance; aucune analyse des tendances; pas de bonnes statistiques, mais facilement extensible.

Dépend de Jython, HTTPClient, JEditSyntax, ApacheXMLBeans, PicoContainer.

TPTP

paramétrable!?; Java outil de la plate-forme; pas de JVM micro benchmarking!?; traçage; la persistance; le graphique de l'analyse des tendances; pas de statistiques!?

Le Test de Performance et des Outils de la Plateforme est un énorme générique et extensible outil de plate-forme (basé sur Eclipse et quatre modèles EMF). Par conséquent, il est puissant, mais assez complexe, peut ralentir l'Éclipse vers le bas, et à l'extension de vos propres besoins (par exemple, avec les statistiques de sorte qu'ils ont une influence sur le nombre d'itérations) semble être très difficile.

Usemon

paramétrable!?; Bibliothèque Java; pas de JVM micro-analyse comparative; tracé; la persistance; l'analyse de la tendance!?; les statistiques!?.

L'outil est conçu pour la surveillance dans les grands groupes.

9voto

sbridges Points 16284

Une autre alternative est d'étrier de google. Il permet paramétré test.

7voto

Ula Krukar Points 1950

Essayez d'utiliser http://labs.carrotsearch.com/junit-benchmarks.html. C'est une extension de JUni4, caractéristiques:

Enregistre le temps d'exécution de la moyenne et de l'écart type.
Le Garbage collector de l'activité d'enregistrement.
Par référence JVM phase d'échauffement.
Par-courir et historique de la génération de graphique.
En option les résultats de la persistance dans l'H2 SQL base de données (interrogation avancés, l'analyse historique).

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