JMH вычисляет операции за единицу времени на основе времени ЦП или времени настенных часов? - PullRequest
3 голосов
/ 19 сентября 2019

Учитывая использование JMH по умолчанию, я хотел бы убедиться, на каком типе времени JMH основывает свои измерения: время процессора или настенные часы.

Я попытался просмотреть официальные образцы JMH (https://openjdk.java.net/projects/code-tools/jmh/), (в Jenkov, Baeldung, Mykong и других), и мне не удалось найти эту информацию точно (я признаю, что, возможно, пропустил некоторую документацию или общую информацию о тестах).

Например,В примере 35 (https://hg.openjdk.java.net/code-tools/jmh/file/99d7b73cf1e3/jmh-samples/src/main/java/org/openjdk/jmh/samples/JMHSample_35_Profilers.java), мы имеем в качестве примера выходных данных:

        Benchmark                              (type)  Mode  Cnt     Score    Error   Units

          JMHSample_35_Profilers.Maps.test     hashmap  avgt    5  1553.201 ±   6.199   ns/op

          JMHSample_35_Profilers.Maps.test     treemap  avgt    5  5177.065 ± 361.278   ns/op

Следовательно, я хотел бы знать, был ли столбец Score рассчитан с использованием времени настенных часов или времени ЦП, такчто я могу точно интерпретировать результаты теста.

1 Ответ

0 голосов
/ 28 сентября 2019

Как я и опасался, я упустил основную информацию и плохо сформулировал свой вопрос, поскольку настенные часы и время процессора - не единственные варианты.Я последовал совету Александра Картапаниса и изучил исходный код JMH.Я обнаружил, что класс BenchmarkGenerator , который производит тесты, опирается на System.nanoTime ().

Кроме того, согласно документации System.nanoTime () и Ответ Кевина Бурриллиона на другой вопрос, я пришел к выводу, что JMH по умолчанию измеряет время в соответствии с произвольным,но исправлено, источник (точно так же как System.nanoTime ()).

...