Библиотека синхронизации производительности Java - PullRequest
21 голосов
/ 06 августа 2009

Я часто заключаю код в пару System.nanoTime () , чтобы синхронизировать его. Что-то вроде:

long start = System.nanoTime();    
methodToBeTimed();
long elapsedTime = System.nanoTime() - start;

Есть какая-нибудь хорошая библиотека синхронизации, которая помогает с этой проблемой? Также будет принят доморощенный код.

NB

Профилировщик здесь не является решением, так как я хочу применить некоторые временные ограничения в своих модульных тестах, поэтому я хочу использовать методы синхронизации программно .

Ответы [ 12 ]

0 голосов
/ 25 сентября 2014

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

0 голосов
/ 17 мая 2012

ручная работа ...

<code>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());
 *  }
 * 
* * @author Михаил Михайлович Адамович * / общественный класс Секундомер { защищенный длинный totalTime; защищенный long maxLapTime; Защищенный long minLapTime = Long.MAX_VALUE; защищенный длинный кругосчет; защищенный длинный lastThreshold; / ** * Удобочитаемое время в секундах * * @param nanoTime * @ время возврата в секундах * / public static final String toSeconds (long nanoTime) { return String.format ("%. 9f", nanoTime / 1000000000.0); } public long getAverageLapTime () { if (lapsCount == 0) вернуть 0; return totalTime / lapsCount; } public long getMaxLapTime () { return maxLapTime; } public long getMinLapTime () { return minLapTime; } public long getTotalTime () { вернуть totalTime; } / ** * Возвращает время последнего круга, статистику процесса. * / public long lapTime () { return processLapTime (); } private long processLapTime () { if (lastThreshold == 0) бросить новое IllegalStateException («Секундомер остановлен.»); окончательный длинный сейчас = nanoTime (); final long lapTime = now - lastThreshold; lapsCount ++; totalTime + = lapTime; if (lapTime> maxLapTime) maxLapTime = lapTime; if (lapTime
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...