Библиотека времени выполнения в Java
Я часто обертываю код в
12 ответов
не прямой ответ на ваш вопрос, но я также часто использую этот совет для времени моего кода и просто написал следующий простой 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-максимальное количество миллисекунд, которое разрешено запускать методу.
Если вы используете Spring, у вас уже есть хороший класс под названием секундомер в вашем classpath для этого предложить.
какую помощь вы ищете с этой проблемой? У вас есть основы. Вы получаете истекшее время в наносекундах с точностью до любого разрешения, на которое способна базовая ОС/оборудование.
также... и я знаю, что вы сказали никаких профайлеров... но у меня был выдающийся опыт работы с 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;
}
}
Я только начал использовать Java Simon (ранее на Google Code), и кажется удивительным! Простой набор секундомеров и счетчиков с несколькими зависимостями.