Измерение скорости в затмении, времени выполнения, времени выполнения

Я пытаюсь найти разумную возможность измерить скорость моей Java-программы / программных частей, например, чтобы проверить, какой из двух методов выполняется быстрее. Закомментируйте один из двух методов, определите время выполнения и, наконец, сравните время. Я не хочу использовать в моей программе какие-либо коды, такие как:

public long getTime() {
  return System.currentTimeMillis();
}

Для кислорода затмения я попробовал встроенный в Eclipse профилировщик Java, который называется: JVM Monitor.

Но я получаю только сложные детали процессора, например, и другую информацию, не относящуюся ко времени выполнения моих методов. Или я что-то упустил.

Может быть, другой плагин от Eclipse Marketplaces более полезен и концентрируется только на времени выполнения?

1 ответ

JMH (Java Microbenchmark Harness) из OpenJDK должен соответствовать вашим потребностям:

JMH - это инструмент Java для сборки, запуска и анализа нано / микро / милли / макро тестов, написанных на Java и других языках, предназначенных для JVM.

Рекомендуемый способ запуска эталонного теста JMH - использовать Maven для настройки автономного проекта, который зависит от jar-файлов вашего приложения. Этот подход предпочтителен для обеспечения правильной инициализации тестов и получения надежных результатов. Можно выполнить тесты из существующего проекта и даже из среды IDE, однако настройка более сложна, а результаты менее надежны.

Вот простой подход к сравнительному анализу с JMH:

  • Создать проект Maven, используя архетип jmh-java-benchmark-archetype
  • Отредактируйте этот проект в Eclipse, чтобы создать код, который вы хотите протестировать, и создать JAR-файл.
  • Запустите файл JAR из терминала / командной строки. JMH сделает свое дело и покажет результаты.

Чтобы дать вам лучшее представление, вот несколько тривиальных аннотированных кода для загрузки данных в HashMap:

import java.util.HashMap;
import java.util.concurrent.TimeUnit;

import org.openjdk.jmh.annotations.Benchmark;
import org.openjdk.jmh.annotations.BenchmarkMode;
import org.openjdk.jmh.annotations.Mode;
import org.openjdk.jmh.annotations.OutputTimeUnit;

public class MyBenchmark {

    @Benchmark
    @BenchmarkMode(Mode.AverageTime)
    @OutputTimeUnit(TimeUnit.MILLISECONDS)
    public void testMethod() {

        HashMap<Integer, String> map = new HashMap<>();

        for (int i = 0; i < 1000; i++) {
            map.put(i, "" + i);
        }
    }
}

Это был буквально весь код, необходимый для использования JMH, а класс и метод уже были созданы Maven; Я только что предоставил аннотации и четыре строки Java.

Конечно, это гораздо больше, чем получение полезной информации из JMH, но вы должны быть в состоянии запустить что-то в течение примерно 15 минут, если вы будете следовать одному из многочисленных онлайн-руководств. Openjdk также предоставляет 38 примеров кода.

Другие вопросы по тегам