用于计算机科学实验的CPU时间或Java用户时间?

时间:2012-06-18 22:06:19

标签: java benchmarking cpu-time

当我在Java中使用CPU或用户时间时,如何在时间上相互评估我的算法?我使用了这里的信息:How to get CPU, system, and user time for benchmarking来获取这些值......

我们走了:

"User time" is the time spent running your application's own code.
"System time" is the time spent running OS code on behalf of your application (such as for I/O).

我们经常也会提到“CPU时间”:

"CPU time" is user time plus system time. It's the total time spent using a CPU for your application.

哪种最适合CS实验?

2 个答案:

答案 0 :(得分:3)

当然这取决于你的算法。

如果您的算法本身不执行I / O,则用户时间是衡量其优异程度的最准确指标。

但是,如果您的算法执行基于磁盘的排序,则包含I / O的时间更合适。

请注意,Java VM本身也运行自己的代码,最值得注意的是GC,从操作系统的角度来看也算作用户时间,所以如果你想要真正彻底,你可以尝试将影响降到最低GC记录GC运行时间并从操作系统测量的用户时间中减去GC。 (另一方面,你可以争辩说,如果两个算法在相同的条件下运行,并且一个触发了比另一个更多的GC运行,那么这就是算法本身的错误。)

更新抱歉,我刚刚阅读了您关联的页面,当然如果您衡量线程的用户时间,上述内容不适用,只有当您查看用户时间时整个(重量级)过程。

答案 1 :(得分:2)

经常是时间过去是唯一重要的事情。如果您可以编写一个使用多个内核的程序(这会增加CPU时间)但减少用户等待的时间,这是更可取的。 Elapse时间包括IO,用户和系统时间。