class testx
{
public testx()
{
long startTime = System.nanoTime();
System.out.println((System.nanoTime() - startTime));
}
public static void main(String args[])
{
new testx();
new testx();
new testx();
}
}
I always get results similar to this 7806 660 517. Why the first call takes 10 times more time than other ones?
Because the JVM loads a bunch o’ classes for the first time at that point. Once that first
System.nanoTime()returns, you have already loadedSystem.classandtestx.class, but onceSystem.out.printlncomes into the picture, I suspect a lot of I/O classes get loaded up, and that takes some time.In any event, this is not a good benchmarking technique; you should really be warming up the JIT by running something for ~10000 iterations before you start measuring it. Alternately (and preferably), use a pre-built benchmarking tool like Caliper.