测量JAVA中部分代码所用的CPU时间

时间:2013-04-04 16:11:16

标签: java time cpu elapsed

我目前正在尝试测量java中部分代码的实际CPU时间。 我读过这个以获得CPU时间你必须使用

cpuTime = ManagementFactory.getThreadMXBean().getCurrentThreadCpuTime();

但实际上当我尝试在那段代码中测量它时,当经过的时间等于零时会抛出错误.....(在我看来这是不可能的,具有纳秒精度)。 while循环可以很大,也可以很小(最少10个分钟)。

long startTime = ManagementFactory.getThreadMXBean()
                        .getCurrentThreadCpuTime();
// reset with seed solution for each neighborRule and
// each pivoting rule
t.setCurrentBestSolution(seedSolution);
while (t.chooseNextImprovingNeighborSolution(pivotingRule,
                        neighborRule));                 
long endTime = ManagementFactory.getThreadMXBean()
                    .getCurrentThreadCpuTime();
if (endTime - startTime == 0) {
    System.err.println(pivotingRule + ":" + neighborRule);
    System.err.println("END TIME:" + endTime);
    System.err.println("START TIME:" + startTime);
                }

有什么想法吗?我没有正确使用CPUThread部分吗? 我应该使用外部Java基准测试程序吗?

提前致谢

2 个答案:

答案 0 :(得分:1)

  

我应该使用外部Java基准测试程序吗?

是的,请做。 Jprofiler衡量其他有用指标中的实际经过时间。

答案 1 :(得分:-1)

SystemRuntime课程的方法会对您有所帮助。 看看:

http://docs.oracle.com/javase/1.5.0/docs/api/java/lang/System.html http://docs.oracle.com/javase/1.5.0/docs/api/java/lang/Runtime.html

例如:您可以使用:System.currentTimeMillis();在程序之前和之后以毫秒为单位返回时间! (在main方法的开头或结尾!)