我目前正在尝试测量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基准测试程序吗?
提前致谢
答案 0 :(得分:1)
我应该使用外部Java基准测试程序吗?
是的,请做。 Jprofiler衡量其他有用指标中的实际经过时间。
答案 1 :(得分:-1)
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/Runtime.html
例如:您可以使用:System.currentTimeMillis();
在程序之前和之后以毫秒为单位返回时间! (在main
方法的开头或结尾!)