Каков наилучший инструмент / фреймворк макро-бенчмаркинга для измерения однопоточного сложного алгоритма в Java? [закрытый]
Я хочу сделать некоторые показатели производительности (в основном во время выполнения) для моего кода Java, однопоточного, локального, сложного алгоритма. (Поэтому я не хочу макро-контрольных показателей для оценки реализации виртуальной машины Java.)
с помощью инструмента, я хотел бы
- анализ сложности, т. е. смотрите, как мой код масштабируется для параметра n (глубина поиска). (У меня уже есть тест junit, параметризованный в n.)
- сделай что-нибудь анализ тенденций получить предупрежден, если некоторые изменения в базе кода делают код медленнее.
для этого, я хотел бы использовать инструмент или фреймворк, который
- тут статистика оптимально вычисляя среднее значение, стандартное отклонение и доверительные интервалы. Это очень важно.
- может быть параметризованные (см. параметр n выше). Это тоже очень важно.
- способен производить причудливый сюжет было бы неплохо, но нет требуется
- может использоваться в автоматизированном (junit-)тесте, чтобы предупредить меня, если моя программа замедляется, но это также не требуется, просто плюс.
какие инструменты / фреймворки удовлетворяют этим требованиям? Какой из них хорошо подходит для анализа сложности и тенденций, и почему?
3 ответа:
Ниже приведен алфавитный список всех инструментов, которые я нашел. Упомянутые аспекты:
- это легко параметрируемые
- это библиотека Java или, по крайней мере, легко интегрируется в вашу программу Java
- может ли он обрабатывать микро бенчмаркинг JVM, например, использовать фазу прогрева
- может ли он построить результаты визуально
- может ли он хранить измеренные значения постоянно
- может ли он сделать анализ тренда, чтобы предупредить, что новый коммит вызвал замедление
- предоставляет ли он и использует статистику (по крайней мере, максимальное, минимальное, среднее и стандартное отклонение).
параметризуемый; библиотека Perl; нет JVM микро бенчмаркинга; построение графиков; персистентность; анализ тенденций!?; хорошая статистика (выполнить данный тест, пока результаты не стабилизируются; выделить выбросы).
не параметрируемые; Java-библиотека; для JVM микро-бенчмаркинг; ни интриг; без стойкости; анализ тренда; статистика.
очень хорошо ли статистика: помимо среднего, максимального, минимального и стандартного отклонения, она также вычисляет 95% доверительный интервал (через загрузку) и последовательную корреляцию (например, чтобы предупредить о колебаниях времени выполнения, которые могут возникнуть, если ваша программа ведет себя недетерминированно, например, потому что вы используете хэш-наборы). Это решает, как часто программа должна быть повторяется для получения точных измерений и интерпретирует их для отчетности и предупреждений (например, о выбросах и последовательной корреляции).
также микро-бенчмаркинг очень хорошо (см. создать быстрый / надежный тест с java? для деталей).
к сожалению, фреймворк поставляется в util-пакете в комплекте с большим количеством других вспомогательных классов. Эталонные классы зависят от JSci (научный API для Java) и Mersenne Twister (http://www.cs.gmu.edu/~sean / research/). если автор, Брент Бойер, найдет время, он сварит библиотеку и добавит более простой grapher, чтобы пользователь мог визуально проверять измерения, например, для корреляций и выбросов.
параметризуемый; Java библиотека; JVM микро бенчмаркинг; построение графиков; персистентность; нет анализа тенденций; статистика.
относительно новый проект, ориентированный на Приложения для Android. Выглядит молодо, но многообещающе. Зависит от Google Guava : (
не параметрируемые!?; Java-библиотека; отсутствие JVM в микро-бенчмаркинг!?; построение графика; постоянство через сервлет; нет анализа тренда!?- никакой статистики!?.
поддерживает аппаратуры АОП.
не параметризуется; библиотека Java; нет JVM микро бенчмаркинга; построение графиков, анализ устойчивости и тенденций с помощью дополнительных инструментов (Jarep или JMX); статистика.
хороший контроль, переплетенный с log4j, данные можно также программно достигнуть или запросить и ваша программа может принять действия на результатах.
не параметрируемые!?; Java-библиотека; отсутствие JVM в микро-бенчмаркинг; заговор только с Jarep; настойчивость только с помощью JMX; отсутствие анализа тренда; нет статистика!?.
конкурент хамона, поддерживает иерархию мониторов.
не параметризуется; библиотека Java; микро бенчмаркинг JVM; построение графиков; персистентность; нет анализа тенденций; нет статистики.
хороший легкий инструмент мониторинга, без зависимостей :) не предлагает достаточной статистики (без стандартного отклонения), и расширение плагина соответственно выглядит довольно сложно (агрегаторы и Агрегаты имеют только фиксированные геттеры для min, max и average).
параметрируемые!?; Java-библиотека; отсутствие JVM в микро-бенчмаркинг!?; построение графиков; настойчивость; анализ тенденций!?- статистика!?.
хорошая библиотека мониторинга, предназначенная для нагрузочного тестирования веб-приложений.
Жгут Проводов Java Microbenchmark (
jmh
)параметризированного (пользовательских вызове с помощью Java API-интерфейс); Java-библиотека; для JVM microbenchmarking; никаких заговоров; без стойкости; анализ тренда; статистика.
проводка бенчмаркинга построенная специалистами точки доступа Oracle, таким образом очень соответствующая для microbenchmarking на точке доступа, используемой в работе представления OpenJDK. Для обеспечения надежной среды бенчмаркинга принимаются крайние меры. Помимо удобочитаемого вывода, jmh предоставляет Java API для обработки результатов, например, для сторонних плоттеров и персистентности услуги поставщиков.
параметризуемый; библиотека Java; JVM micro benchmarking; построение графиков; персистентность (с использованием консоли, XML или базы данных H2); графический анализ тенденций; статистика (max, min, average, standard deviation; но не легко расширяемая для дальнейшей статистики).
просто добавьте правило junit-4 в свои тесты junit:)
junit-бенчмарки с открытым исходным кодом, под Apache 2 лицензия.
обновление: проект переехал на
jmh
главным образом для делать анализ тенденции для представления (с декоратором испытания JUnit
TimedTest
) и масштабируемость (с помощью JUnit test decoratorLoadTest
).параметрируемые; Java-библиотека; отсутствие JVM в микро-бенчмаркинг; ни интриг; отсутствие настойчивости; отсутствие статистика.
не параметризуется; библиотека Java; нет JVM микро бенчмаркинга; построение графиков; сохранение через JMX; анализ тенденций через приложение log4j; статистика.
строит на основе структуры ведения журнала, может использовать AOP.
очень общая концепция: мониторы соблюдают предопределенные условия и определяют, как реагировать, когда они выполняются.
основной упор делается на parameterizability: проверка Весов алгоритма, т. е. проверить, если это o(n), а за o(n журнал(N)) и o(Н2)...
библиотека java; JVM микро бенчмаркинг; нет построения графиков; постоянство; анализ тенденций; нет статистики.
параметрируемые; библиотека языка Jython; отсутствие JVM в микро-бенчмаркинг; черчение; настойчивость; отсутствие тренда анализ; нет хорошей статистики, но легко расширяется.
зависит от Jython, HTTPClient, JEditSyntax, ApacheXMLBeans, PicoContainer.
параметрируемые!?; Платформы Java инструмент; отсутствие JVM в микро-бенчмаркинг!?; построение графиков; постоянство; графический анализ тенденций; нет статистики!?
платформа Test & Performance Tools-это огромная универсальная и расширяемая инструментальная платформа (основанная на Eclipse и четырех моделях EMF). Следовательно, он мощный, но довольно сложный, может замедлить затмение, и расширение его для ваших собственных нужд (например, со статистикой, чтобы они влияли на количество итераций) кажется очень сложным.
параметрируемые!?; Библиотека Java; нет микро бенчмаркинга JVM; построение графиков; постоянство; анализ тенденций!?- статистика!?.
инструмент предназначен для мониторинга в больших кластерах.
Другой альтернативой является регулировка от google. Это позволяет параметризованного тестирования.
попробуйте использовать http://labs.carrotsearch.com/junit-benchmarks.html. это расширение для JUni4, особенности:
записывает среднее время выполнения и стандартное отклонение.
Запись активности сборщика мусора.
ТВ-тест для JVM прогрева.
За запуск и генерацию исторических диаграмм.
Необязательное сохранение результатов в базе данных SQL H2 (расширенный запрос, исторический анализ).