How Many Microseconds are there in a Nanosecond?
Do you know how many microseconds are there in a nanosecond? You thought it was 10-3, eh? Heh, think twice and no, I have not gone nuts. At least, not yet. Read on.
More seriously, what am I ranting about, here? Time precision in Java, is the topic.
Today, I needed to profile a process which takes less than a millisecond (10-3 seconds). Up to and including JDK 1.4 the precision of Java time used to be order of a millisecond and for anything more precise you were pointed to JNI, which is a nasty place to be pointed to, let me say. Fortunately enough JDK 5 has added System.nanoTime() method and Sun has honestly implemented it in its JDK. Thanks a lot to Sun, for that but - hold the excitement, for a second.
Does this method really give the precision of a nanosecond? Let's check it (using a tuned version of the code from Vladimir Roubtsov):
public static void main( String[] args) {
for (int i = 0; i < 10000; i++) System.nanoTime ();
long accumulated = 0;
int iterations = 200;
{
// Wait till the system time changes:
while ( end == start )
end = System.nanoTime ();
start = end = System.nanoTime ();
}
}
}
Following are the results of running this script on different platforms:
Windows: delta = 1265 nanoseconds
Linux: delta = 1015 nanoseconds
Let me, also, note that Windows machine was a 1.7GHz IBM ThinkPad laptop, whereas the Linux box is a dual-Xeon server. The results are quite close, to ignore any hardware and software differences and declare that:
There are approximately 1-1.3 microseconds in a nanosecond... at least, in Java ;-)
