Consumed Time of System.out.println(); Java statement?

萝らか妹 提交于 2019-12-23 09:37:49

问题


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?


回答1:


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.




回答2:


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)




回答3:


When i tested your code, the output is always 0.0. Pls try your benchmark with System.nanoTime(); Or do it with more System.out.println()

    double t1 = 0;
    double t2 = 0;

    t1 = System.currentTimeMillis();
    for(int i = 0; i<1000; i++)
        System.out.println("aa");
    t2 = System.currentTimeMillis();
    System.out.println("The cost = " + (t2-t1) ); 


    t1 = System.currentTimeMillis();
    for(int i = 0; i<100; i++)
        System.out.println("aa");
    t2 = System.currentTimeMillis();
    System.out.println("The cost = " + (t2-t1) ); 

Output: 62.0 and 5.0

And this difference of 1.2 ms is because the loop gets faster while runtime.




回答4:


Also, the time to complete System.out.println will be different on a more or less powerful computer, and how busy that computer is performing other tasks at that particular moment.



来源:https://stackoverflow.com/questions/20683361/consumed-time-of-system-out-println-java-statement

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!