usted - ¿Cuál es la mejor herramienta/marco de macroevaluación para medir un algoritmo complejo de subproceso único en Java?
suponga que tiene una tienda y desea registrar sus ventas por medio de una computadora (3)
A continuación hay una lista alfabética de todas las herramientas que encontré. Los aspectos mencionados son:
- es fácilmente parametrizable
- ¿es una biblioteca Java o al menos fácilmente integrable en su programa Java?
- puede manejar el micro benchmarking de JVM, por ejemplo, usar una fase de calentamiento
- puede trazar los resultados visualmente
- puede almacenar los valores medidos persistentemente
- ¿Puede hacer análisis de tendencias para advertir que un nuevo compromiso causó una desaceleración
- proporciona y usa estadísticas (al menos máx., mín., promedio y desviación estándar).
parametrizable; Biblioteca de Perl; ninguna micro evaluación comparativa de JVM; trazado; persistencia; ¿¡análisis de tendencia!?; buenas estadísticas (ejecutar una prueba determinada hasta que los resultados se estabilicen; resaltar valores atípicos).
no parametrizable; Biblioteca de Java; Micro benchmarking de JVM; no trama; sin persistencia; sin análisis de tendencia; estadística.
¿Las estadísticas extremadamente bien: además de promedio, máximo, mínimo y desviación estándar, también calcula el intervalo de confianza del 95% (a través de arranque) y la correlación serial (por ejemplo, para advertir sobre tiempos de ejecución oscilantes, que pueden ocurrir si su programa se comporta de forma no determinante, por ejemplo porque usas HashSets). Decide con qué frecuencia debe iterarse el programa para obtener mediciones precisas e interpreta esto para informes y advertencias (por ejemplo, sobre valores atípicos y correlación serial).
También hace muy bien el micro-benchmarking (ver Crear referencia rápida / confiable con java para más detalles).
Lamentablemente, el marco viene en un paquete de utilidades junto con muchas otras clases auxiliares. Las clases de referencia dependen de JSci (una API científica para Java) y Mersenne Twister ( http://www.cs.gmu.edu/~sean/research/ ). Si el autor, Brent Boyer, encuentra tiempo, hará hervir la biblioteca y agregará un grapher más simple para que el usuario pueda inspeccionar visualmente las mediciones, por ejemplo, para correlaciones y valores atípicos.
parametrizable; Biblioteca de Java; Micro benchmarking de JVM; trazado; persistencia; sin análisis de tendencia; estadística.
Proyecto relativamente nuevo, hecho a la medida de las aplicaciones de Android. Parece joven pero prometedor. Depende de Google Guava :(
no parametrizable!?; Biblioteca de Java; ¡ninguna micro evaluación comparativa de JVM!?; trazado; persistencia a través de un servlet; sin análisis de tendencias!?; sin estadísticas!?.
Admite la instrumentación de AOP.
no parametrizable; Biblioteca de Java; ninguna micro evaluación comparativa de JVM; trazado, persistencia y análisis de tendencia con herramientas adicionales (Jarep o JMX); estadística.
Una buena monitorización, entrelazada con log4j, también puede accederse o consultarse mediante programación y su programa puede tomar medidas sobre los resultados.
no parametrizable!?; Biblioteca de Java; ninguna micro evaluación comparativa de JVM; trazando solo con Jarep; persistencia solo con JMX; sin análisis de tendencia; sin estadísticas!?.
Competidor de Jamon, admite una jerarquía de monitores.
no parametrizable; Biblioteca de Java; Micro benchmarking de JVM; trazado; persistencia; sin análisis de tendencia; sin estadísticas
Buena herramienta de monitoreo liviana, sin dependencias :) No ofrece estadísticas suficientes (sin desviación estándar), y extender el complemento en consecuencia se ve bastante difícil (los Agregadores y Agregados solo tienen captadores fijos para mínimo, máximo y promedio).
parametrizable!?; biblioteca de Java; ¡ninguna micro evaluación comparativa de JVM!?; trazado; persistencia; ¿¡análisis de tendencia!?; ¿¡estadística!?.
Buena biblioteca de supervisión que se adapta a las aplicaciones web de prueba de carga.
Arnés Microbenchmark de Java ( jmh
)
parametrizable (invocadores personalizados a través de Java API); Biblioteca de Java; JVM microbenchmarking; sin tramas; sin persistencia; sin análisis de tendencia; estadística.
El arnés de evaluación comparativa creado por los expertos de HotSpot de Oracle, por lo tanto, es muy adecuado para microentrenamientos en HotSpot, utilizado en el trabajo de rendimiento de OpenJDK. Se toman medidas extremas para proporcionar un entorno confiable de evaluación comparativa. Además de la salida legible por humanos, jmh proporciona una API de Java para procesar los resultados, por ejemplo, para trazadores de terceros y proveedores de persistencia.
parametrizable; Biblioteca de Java; Micro benchmarking de JVM; trazado; persistencia (usando CONSOLE, XML o base de datos H2); análisis gráfico de tendencias; estadísticas (máx., mín., promedio, desviación estándar, pero no fácilmente extensibles para más estadísticas).
Simplemente agrega una regla junit-4 a tus pruebas junit :)
junit-Benchmarks es de código abierto, bajo la licencia Apache 2.
Actualización : proyecto movido a jmh
Principalmente para hacer análisis de tendencia para el rendimiento (con el decorador de pruebas JUnit TimedTest
) y la escalabilidad (con el decorador de prueba JUnit LoadTest
).
parametrizable; Biblioteca de Java; ninguna micro evaluación comparativa de JVM; no trama; sin persistencia; sin estadísticas
no parametrizable; Biblioteca de Java; ninguna micro evaluación comparativa de JVM; trazado; persistencia a través de JMX; análisis de tendencia a través de un apilador log4j; estadística.
Se basa en un marco de registro, puede usar AOP.
Concepto muy general: los monitores observan condiciones predefinidas y especifican cómo reaccionar cuando se cumplen.
El foco principal está en la parametrizabilidad: verifica si tu algoritmo escala, es decir, comprueba si es O (n), O (n log (n)), O (n²) ...
biblioteca de Java; Micro benchmarking de JVM; no trama; persistencia; análisis de tendencia; sin estadísticas
parametrizable; Biblioteca Jython; ninguna micro evaluación comparativa de JVM; trazado; persistencia; sin análisis de tendencia; no hay buenas estadísticas, pero fácilmente extensibles.
Depende de Jython, HTTPClient, JEditSyntax, ApacheXMLBeans, PicoContainer.
parametrizable!?; Plataforma de herramientas Java; ¡ninguna micro evaluación comparativa de JVM!?; trazado; persistencia; análisis gráfico de tendencias; sin estadísticas !?
La plataforma de herramientas de prueba y rendimiento es una enorme plataforma de herramientas genérica y extensible (basada en Eclipse y cuatro modelos EMF). Por lo tanto, es potente pero bastante complejo, puede ralentizar Eclipse y ampliarlo para sus propias necesidades (por ejemplo, con estadísticas para que influyan en el número de iteraciones) parece ser muy difícil.
parametrizable!?; Biblioteca de Java; ninguna micro evaluación comparativa de JVM; trazado; persistencia; ¿¡análisis de tendencia!?; ¿¡estadística!?.
La herramienta se adapta a la monitorización en clusters grandes.
Quiero hacer algunas medidas de rendimiento (principalmente tiempo de ejecución) para mi código de Java, un algoritmo complejo local único. (Por lo tanto, no quiero que un macro-benchmark mida una implementación de JVM).
Con la herramienta, me gustaría
- analizar la complejidad , es decir, ver cómo mi código escala para un parámetro n (la profundidad de búsqueda). (Ya tengo una prueba junit parametrizada en n.)
- haga un análisis de tendencias para obtener una advertencia si algún cambio en la base del código hace que el código sea más lento.
Para esto, me gustaría usar una herramienta o marco que
- hace las estadísticas , calculando de manera óptima el valor medio, la desviación estándar y los intervalos de confianza. Esto es muy importante.
- se puede parametrizar (ver parámetro n arriba). Esto también es muy importante.
- es capaz de producir una trama elegante sería agradable, pero no es necesario
- puede usarse en una prueba automática (junit-) para advertirme si mi programa se ralentiza, pero esto tampoco es necesario, solo un plus.
¿Qué herramientas / marcos cumplen con estos requisitos? ¿Cuál sería adecuado para el análisis de complejidad y tendencia, y por qué?
Intenta usar http://labs.carrotsearch.com/junit-benchmarks.html . Esta es una extensión de JUni4, características:
Registra el promedio de tiempo de ejecución y la desviación estándar.
Grabación de la actividad del recolector de basura.
Por fase de referencia JVM fase de calentamiento.
Generación de gráficos históricos y por ejecución.
Persistencia de resultados opcionales en la base de datos H2 SQL (consulta avanzada, análisis histórico).
Otra alternativa es calibre de google. Permite pruebas parametrizadas .