Библиотека времени выполнения в Java

Я часто обертываю код в

12 ответов


Я не использовал его, но я наткнулся на perf4j недавно.


не прямой ответ на ваш вопрос, но я также часто использую этот совет для времени моего кода и просто написал следующий простой Eclipse - > Surround с шаблоном:

long startTime = System.currentTimeMillis();
${line_selection}${cursor}
long totalTime = System.currentTimeMillis() - startTime;
System.out.println("Total time = " + totalTime);
System.out.println();

JUnit 4 получил встроенную функциональность синхронизации-contraint.

@Test (timeout=X)

следует сделать трюк. X-максимальное количество миллисекунд, которое разрешено запускать методу.


здесь секундомер из commons-lang, он также позволяет разделить таймер.


Если вы используете Spring, у вас уже есть хороший класс под названием секундомер в вашем classpath для этого предложить.


пробовал утилит jperf ?


какую помощь вы ищете с этой проблемой? У вас есть основы. Вы получаете истекшее время в наносекундах с точностью до любого разрешения, на которое способна базовая ОС/оборудование.

также... и я знаю, что вы сказали никаких профайлеров... но у меня был выдающийся опыт работы с YourKit. Он предоставляет API, который можно использовать для управления профилированием извне. В зависимости от того, что ваша точная проблема, это может стоить посмотреть на.


регулировка

и в дополнение к чтению в вики на этом сайте, я рекомендую прочитать:


JETM хорошая библиотека для этого. Он также может обеспечить мин, макс и средние значения, а также может генерировать информативные графики.


ручной работы...

import static java.lang.System.nanoTime;

/**
 * For testing / debug purposes.
 * 
 * <pre>
 *  private Stopwatch stopwatch = new Stopwatch();
 *  ...
 *  public void method1() {
 *      stopwatch.reset();
 *      for (...) {
 *          ...
 *          stopwatch.start();
 *          operation1();
 *          stopwatch.stop();
 *          ...
 *      }
 *      System.out.println("operation 1 max timing is " + stopwatch.getMaxLapTime());
 *  }
 *  ...
 *  public void method2() {
 *      stopwatch.reset();
 *      for (...) {
 *          ...
 *          stopwatch.start();
 *          operation2();
 *          stopwatch.stop();
 *          ...
 *      }
 *      System.out.println("operation 2 max timing is " + stopwatch.getMaxLapTime());
 *  }
 * </pre>
 * 
 * @author Mykhaylo Adamovych
 */
public class Stopwatch {
    protected long totalTime;
    protected long maxLapTime;
    protected long minLapTime = Long.MAX_VALUE;
    protected long lapsCount;
    protected long lastThreshold;

    /**
     * Human readable time in seconds
     * 
     * @param nanoTime
     * @return time in seconds
     */
    public static final String toSeconds(long nanoTime) {
        return String.format("%.9f", nanoTime / 1000000000.0);
    }

    public long getAverageLapTime() {
        if (lapsCount == 0)
            return 0;
        return totalTime / lapsCount;
    }

    public long getMaxLapTime() {
        return maxLapTime;
    }

    public long getMinLapTime() {
        return minLapTime;
    }

    public long getTotalTime() {
        return totalTime;
    }

    /**
     * Returns last lap time, process statistic.
     */
    public long lapTime() {
        return processLapTime();
    }

    private long processLapTime() {
        if (lastThreshold == 0)
            throw new IllegalStateException("Stopwatch is stopped.");
        final long now = nanoTime();
        final long lapTime = now - lastThreshold;
        lapsCount++;
        totalTime += lapTime;
        if (lapTime > maxLapTime)
            maxLapTime = lapTime;
        if (lapTime < minLapTime)
            minLapTime = lapTime;
        lastThreshold = nanoTime();
        return lapTime;
    }

    /**
     * Resets statistic and starts.
     */
    public void reset() {
        totalTime = 0;
        maxLapTime = 0;
        minLapTime = Long.MAX_VALUE;
        lapsCount = 0;
        start();
    }

    /**
     * Starts time watching.
     */
    public void start() {
        lastThreshold = nanoTime();
    }

    /**
     * Suspends time watching, returns last lap time.
     */
    public long stop() {
        final long lapTime = processLapTime();
        lastThreshold = 0;
        return lapTime;
    }
}

что-то новое на рынке JMH. Это сделано под эгидой проекта openjdk.


Я только начал использовать Java Simon (ранее на Google Code), и кажется удивительным! Простой набор секундомеров и счетчиков с несколькими зависимостями.