Тесты производительности
В мире придумано уже очень много алгоритмов. Все они в том или ином виде реализованы в языках программирования и хранятся в библиотеках. Все кто использует стандартную библиотеку получают более менее стандартный результат. Многие люди стараются превзойти этот результат и написать более быстрые алгоритмы или более эффективные. Для того, чтобы сравнить два алгоритма, надо проводить тестирование производительности. Это довольно сложная тема, о которой много пишет Шипилев. Он же является ответственным за инструмент для проведения бенчмарков на java JMH.
Документации по JMH довольно мало. Я нашел следующие источники информации:
- Доклады Шипилева
- Stackoverflow
- Примеры из исходников
Это позволило мне написать свой первый простой и возможно не очень показательный бенчмарк:
Я получил следующий результат:
Benchmark Mode Cnt Score Error Units
JavaMapBenchmark.testHashMap thrpt 5 16778578.614 ± 901741.764 ops/s
JavaMapBenchmark.testTreeMap thrpt 5 6345125.655 ± 335465.052 ops/s
Таким образом в моем случае get в HashMap быстрее чем в TreeMap.
Какие вопросы я оставил без ответа:
- State и как с ним правильно работать в бенчмарке
- Настройки запуски бенчмарка с помощью аннотаций
- Интерпретация результатов бенчмарка, что значат все эти Mode, Cnt, Score, Error, Units.