I hear that the System.out.println();
Java statement is costly (it consumes a lot of time)
So I try to evaluate its cost:
When I evaluate 5 statements... The cost = 1.0
So I expect the cost of 1 statement = 0.2
But actually I found The cost = 0.0
!!
double t1 = 0;
double t2 = 0;
t1 = System.currentTimeMillis();
System.out.println("aa");
System.out.println("aa");
System.out.println("aa");
System.out.println("aa");
System.out.println("aa");
t2 = System.currentTimeMillis();
System.out.println("The cost = " + (t2-t1) );
// The cost = 1.0
t1 = System.currentTimeMillis();
System.out.println("aa");
t2 = System.currentTimeMillis();
System.out.println("The cost = " + (t2-t1) );
// The cost = 0.0
// Expected : 1.0/5 = 0.2 -- But Actual : 0.0
Why that?
System#currentTimeMillis
returns long
and not double
. Thus you're loosing .2
.
Testing 5 statements is not a good idea, specially when you almost don't feel the time it takes to perform it. I advise you to have more than 5 statements to test and then reduce the amount to something more than 1 as well.
You want to do a precise measurements time, it's better to use System#nanoTime
, since it gives time in nano seconds:
long startTime = System.nanoTime();
// ... the code being measured ...
long estimatedTime = System.nanoTime() - startTime;
Look for "nanoTime vs currentTimeMillis" and you'll get hundreds of articles.
If the execution time is less than one millisecond, you will see nothing, because the clock hasn't 'ticked' yet. For this type of micro benchmarking, you should use something like:
long t1 = System.nanoTime()
for your time measurements. (this measures time in nanosecond units, although not always with that much granularity)
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With