【发布时间】:2013-12-28 04:57:37
【问题描述】:
我得到的结果是,使用Arrays.sort() 对Long array 进行排序比使用Arrays.sort() 对long array 进行排序花费更多时间。这是代码。
public class ABtest {
public static void main(String[] args) {
long startTime;
long endTime;
//code block 1
startTime = System.nanoTime();
Long a[] = new Long[10000];
for (int i = 0; i < a.length; i++) {
a[i] = 12l;
}
Arrays.sort(a);
endTime = System.nanoTime();
System.out.println("code block (has Long array) 1 = " + (endTime - startTime));
//code block 2
startTime = System.nanoTime();
long c[] = new long[10000];
for (int i = 0; i < c.length; i++) {
c[i] = 12l;
}
Arrays.sort(c);
endTime = System.nanoTime();
System.out.println("code block (has long array) 2 = " + (endTime - startTime));
}
}
运行时间:
code block (has Long array) 1 = 3076331
code block (has long array) 2 = 741501
谁能解释这种行为。还是我在这里做错了什么??
【问题讨论】:
-
您在进行基准标记时需要非常小心。有很多假设情况发生。 ibm.com/developerworks/java/library/j-benchmark1/index.html
-
Long必须拆箱才能排序;long可以按原样排序。加上通常的危害重新基准测试。 (特别是您包括加载数组的时间,在Long情况下,这需要对每个值和所暗示的对象创建进行装箱。) -
这个问题似乎离题了,因为它是关于基准测试的,并不是一个实际的问题,只是一篇关于他们如何错误地对某些东西进行微基准测试的博文。
-
实际上,您的“基准”测量的是创建 10K
Long对象所需的时间。
标签: java arrays performance sorting