2

我目前正在尝试测量我在 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 基准测试器吗?

提前致谢

4

2 回答 2

1

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

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

于 2013-04-04T16:14:55.343 回答
-2

System和类的方法Runtime会对你有所帮助。看看:

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 /运行时.html

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

于 2013-04-04T16:14:47.247 回答