【发布时间】:2014-10-07 19:48:17
【问题描述】:
我正在尝试测量一个循环的执行时间,这是一个简单的添加矩阵。 这是我的代码:
//get integers m and n from user before this.
long start,end,time;
int[][] a = new int[m][n];
int[][] b = new int[m][n];
int[][] c= new int[m][n];
start = getUserTime();
for(int i = 0;i < m;i++)
{
for(int j = 0;j < n;j++)
{
c[i][j] = a[i][j]+b[i][j];
}
}
end = getUserTime();
time = end - start;
/** Get user time in nanoseconds. */
public long getUserTime() {
ThreadMXBean bean = ManagementFactory.getThreadMXBean( );
return bean.isCurrentThreadCpuTimeSupported( ) ?
bean.getCurrentThreadUserTime() : 0L;
}
问题是,有时它会返回 0,例如当我输入 1000 作为 m 和 n 时。这意味着我要添加两个 1000x1000 矩阵。有时它返回 0,有时返回 15ms(都不断重复)。
我不知道该相信 15ms 还是 0。它们之间有很大的不同。 我知道精度取决于操作系统,并不是真正的纳秒精度,但 15 毫秒是一个精度问题。
编辑:这段代码的目的是测量循环中的 CPU 性能。所以如果可能的话,我希望编译器优化和操作系统上下文切换等的影响最小。
非常感谢。
【问题讨论】:
-
如何在 Java 中以纳秒为单位获取当前时间?我不确定这是否可能......
-
您可以获取以毫秒为单位的时间吗?
-
好吧,由于操作系统的准确性(使用 xp),我无法在纳秒内获得它们,但 15 毫秒的差异似乎并不正确。这里还有更多关于上面基准测试的解释:nadeausoftware.com/articles/2008/03/…
-
这也是一个很好的答案看看:stackoverflow.com/questions/1770010/…
标签: java execution-time