Каков наилучший инструмент/основа для макро-бенчмаркинга для измерения однопоточного комплексного алгоритма в Java? - программирование
Подтвердить что ты не робот

Каков наилучший инструмент/основа для макро-бенчмаркинга для измерения однопоточного комплексного алгоритма в Java?

Я хочу сделать некоторые оценки производительности (в основном время выполнения) для моего Java-кода, однопоточного, локального и сложного алгоритма. (Поэтому я не хочу, чтобы макро-бенчмарк измерял реализацию JVM.)

С помощью инструмента я хотел бы

  • проанализировать сложность, т.е. посмотреть, как мой код масштабируется для параметра n (глубина поиска). (У меня уже есть junit-тест, параметризованный в n.)
  • выполните некоторые анализ тенденций, чтобы получить предупреждение, если какое-то изменение базы кода делает код более медленным.

Для этого я хотел бы использовать инструмент или фреймворк, который

  • содержит статистику, оптимально вычисляя среднее значение, стандартное отклонение и доверительные интервалы. Это очень важно.
  • может быть параметризован (см. параметр n выше). Это также очень важно.
  • способен создавать фантастический сюжет, было бы неплохо, но не обязательно
  • может использоваться в автоматическом (junit-) тесте, чтобы предупредить меня, если моя программа замедляется, но это также не требуется, просто плюс.

Какие инструменты/рамки отвечают этим требованиям? Какой из них хорошо подходит для анализа сложности и тренда, и почему?

4b9b3361

Ответ 1

Ниже приведен алфавитный список всех инструментов, которые я нашел. Описанные аспекты:

  • легко ли параметризуется
  • это библиотека Java или, по крайней мере, легко интегрируемая в вашу программу Java.
  • может ли он обрабатывать микро-бенчмаркинг JVM, например. используйте фазу прогрева
  • можно визуально отображать результаты
  • может сохраняться измеренные значения постоянно
  • может ли он анализировать тренд, чтобы предупредить, что новый коммит вызвал замедление.
  • предоставляет и использует статистику (по крайней мере, максимальное, минимальное, среднее и стандартное отклонение).

Авто-пилот

параметризуемый; Библиотека Perl; нет микро-бенчмаркинга JVM; черчения; упорство; анализ тенденций!?; хорошая статистика (запустите данный тест до тех пор, пока результаты не стабилизируются, выделите выбросы).

Базовая схема

не параметрируется; Библиотека Java; Микропроцессорность JVM; нет графика; нет настойчивости; нет анализа тенденций; статистика.

Хорошо ли статистика: помимо среднего, максимального, минимального и стандартного отклонения, он также вычисляет доверительный интервал 95% (через загрузку) и последовательную корреляцию (например, чтобы предупредить о колебательном времени выполнения, которое может возникнуть, если ваша программа ведет себя недетерминированно, например, потому что вы используете HashSets). Он решает, как часто программа должна быть повторена для получения точных измерений и интерпретирует их для отчетов и предупреждений (например, о выбросах и последовательной корреляции).

Также очень хорошо работает микро-бенчмаркинг (см. Создать быстрый/надежный тест с java?).

К сожалению, структура входит в пакет util, который поставляется вместе с множеством других вспомогательных классов. Уровни тестов зависят от JSci (API для Java) и Mersenne Twister (http://www.cs.gmu.edu/~sean/research/). Если автор, Брент Бойер, найдет время, он закипит библиотеку и добавит более простой граф, чтобы пользователь мог визуально проверить измерения, например. для корреляций и выбросов.

Caliper

параметризуемый; Библиотека Java; Микропроцессорность JVM; черчения; упорство; нет анализа тенденций; статистика.

Относительно новый проект, ориентированный на Android-приложения. Выглядит молодым, но многообещающим. Зависит от Google Guava: (

Мониторинг сообществ

не параметризуется!?; Библиотека Java; нет микро-бенчмаркинга JVM!?; черчения; настойчивость через сервлет; нет анализа тренда!?; нет статистики!?.

Поддерживает аппаратное обеспечение АОП.

JAMon

не параметрируется; Библиотека Java; нет микро-бенчмаркинга JVM; построение графика, сохранение и анализ тенденций с помощью дополнительных инструментов (Jarep или JMX); статистика.

Хороший мониторинг, переплетенный с log4j, может также быть запрограммирован или запрошен программным путем, и ваша программа может принимать меры по результатам.

Java Simon

не параметризуется!?; Библиотека Java; нет микро-бенчмаркинга JVM; построение только с Jarep; постоянство только с JMX; нет анализа тенденций; нет статистики!?.

Участник Jamon, поддерживает иерархию мониторов.

JETM

не параметрируется; Библиотека Java; Микропроцессорность JVM; черчения; упорство; нет анализа тенденций; нет статистики.

Хороший легкий инструмент для мониторинга, без зависимостей:) Не предоставляет достаточную статистику (без стандартного отклонения), и расширение plugin соответственно выглядит довольно сложно (агрегаторы и агрегаты имеют фиксированные геттеры для минимального, максимального и среднего).

jmeter

параметризуемый!?; java-библиотека; нет микро-бенчмаркинга JVM!?; черчения; упорство; анализ тенденций!?; статистика!?.

Хорошая библиотека мониторинга, предназначенная для веб-приложений, нагружающих нагрузку.

Java Microbenchmark Harness (jmh)

parametrizable (пользовательские invokers через Java API); Библиотека Java; Микрообъектив JVM; нет участков; нет настойчивости; нет анализа тенденций; статистика.

Жесткий бенчмаркинг, построенный экспертами Oracle HotSpot, что очень подходит для микрозахвата на HotSpot, используемого в работе OpenJDK. Принимаются чрезвычайные меры для обеспечения надежной среды сравнительного анализа. Помимо удобочитаемого вывода, jmh предоставляет API Java для обработки результатов, например. для сторонних заговорщиков и поставщиков персистентности.

junit-Benchmarks

параметризуемый; Библиотека Java; Микропроцессорность JVM; черчения; сохранение (использование CONSOLE, XML или базы данных H2); анализ графического тренда; статистика (макс, мин, среднее, стандартное отклонение, но не легко расширяемое для дальнейшей статистики).

Просто добавьте junit-4-правило в свои тесты junit:)

junit-Benchmarks является открытым исходным кодом под лицензией Apache 2.

Обновить: проект переместился на jmh

junitperf

В основном для проведения анализа тенденций производительности (с помощью JUnit decor decorator TimedTest) и масштабируемости (с помощью JUnit decor decorator LoadTest).

параметризуемый; Библиотека Java; нет микро-бенчмаркинга JVM; нет графика; нет настойчивости; нет статистики.

perf4j

не параметрируется; Библиотека Java; нет микро-бенчмаркинга JVM; черчения; постоянство через JMX; анализ тенденций через приложение log4j; статистика.

Создает структуру ведения журнала, может использовать АОП.

Project Broadway

Очень общая концепция: наблюдатели наблюдают предопределенные условия и определяют, как реагировать, когда они выполняются.

speedy-mcbenchmark

Основное внимание уделяется параметризуемости: проверьте, масштабируется ли ваш алгоритм, т.е. проверяет ли он O (n), O (n log (n)), O (n²)...

java library; Микропроцессорность JVM; нет графика; упорство; анализ тенденций; нет статистики.

The Grinder

параметризуемый; Библиотека Jython; нет микро-бенчмаркинга JVM; черчения; упорство; нет анализа тенденций; нет хорошей статистики, но легко расширяемой.

Зависит от Jython, HTTPClient, JEditSyntax, ApacheXMLBeans, PicoContainer.

TPTP

параметризуемый!?; Инструментальная платформа Java; нет микро-бенчмаркинга JVM!?; черчения; упорство; анализ графического тренда; нет статистики!?

Платформа тестирования и производительности - это огромная универсальная и расширяемая платформа инструментов (основанная на Eclipse и четырех моделях EMF). Следовательно, он мощный, но довольно сложный, может замедлить Eclipse и расширить его для ваших собственных нужд (например, со статистикой, чтобы они влияли на количество итераций), кажется, очень сложно.

Usemon

параметризуемый!?; Библиотека Java; нет микро-бенчмаркинга JVM; черчения; упорство; анализ тенденций!?; статистика!?.

Инструмент предназначен для мониторинга в больших кластерах.

Ответ 3

Попробуйте использовать http://labs.carrotsearch.com/junit-benchmarks.html. Это расширение JUni4, функции:

Записывает среднее время выполнения и стандартное отклонение.
Запись активности коллектора мусора.
Перспективная фаза разминки JVM.
Генерирование в реальном времени и истории.
Дополнительная стабильность результатов в базе данных H2 SQL (расширенный запрос, исторический анализ).