【发布时间】:2013-04-04 16:11:16
【问题描述】:
我目前正在尝试测量我在 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 基准测试器吗?
提前致谢
【问题讨论】:
-
你无法比ns更精确地测量执行时间。如果你想对它进行基准测试,你必须构建一个循环或其他方式来让你的代码更长。