public class HighResTimer {
public static void main(String[] args) {
// Start timer (nanoseconds)
long start = System.nanoTime();
// Do some work
for (int i = 0; i < 1_000_000; i++) {
// volatile-like loop to avoid optimization
}
// Stop timer
long end = System.nanoTime();
long ticks = end - start; // raw nanoseconds
// Convert to time units
double nanoseconds = ticks;
double microseconds = nanoseconds / 1_000.0;
double milliseconds = nanoseconds / 1_000_000.0;
double seconds = nanoseconds / 1_000_000_000.0;
// Frequency (ticks per second)
long frequency = 1_000_000_000L; // nanoTime = 1 GHz resolution
// Print results
System.out.println("Elapsed ticks (ns): " + ticks);
System.out.println("Elapsed ms: " + milliseconds);
System.out.println("Elapsed us: " + microseconds);
System.out.println("Elapsed seconds: " + seconds);
System.out.println("Timer frequency: " + frequency + " Hz");
}
}
/*
run:
Elapsed ticks (ns): 2485510
Elapsed ms: 2.48551
Elapsed us: 2485.51
Elapsed seconds: 0.00248551
Timer frequency: 1000000000 Hz
*/