在尝试比较数据类型“int”和“long”的性能时,我遇到了这个奇怪的问题,基本上我有两个单元测试:
@Test
public void testLongOperationPerformance(){
StopWatch sw = new StopWatch();
sw.start();
long count = 0l;
for(int i = 0; i < Integer.MAX_VALUE; i ++){
count++;
}
sw.stop();
System.out.println(count);
System.out.println(sw.elaspedTimeInMilliSeconds());
}
@Test
public void testIntegerOperationPerformance(){
StopWatch sw = new StopWatch();
sw.start();
int count = 0;
for(int i = 0; i < Integer.MAX_VALUE; i ++){
count++;
}
sw.stop();
System.out.println(count);
System.out.println(sw.elaspedTimeInMilliSeconds());
}
这两个单元测试做同样的事情,不同的是一个使用 int 作为 counter 的数据类型,另一个使用 long 作为那个。结果:
jdk6u32 (64 bit):
test with long
2147483635
96
test with int
2147483647
2
jdk7 (64 bit)
test with long
2147483647
1599
test with int
2147483647
1632
我注意到:
- 在 jdk6u32 中,使用 int 进行测试比使用 long 进行测试要快得多
- 在 jdk6u32 中,int 测试和 long 测试的测试结果不同
- 在 jdk7 中,两个测试的速度差不多,而且都比 jdk6u32 慢得多
- 在 jdk7 中,两个测试都得到了相同的结果
谁能解释为什么会这样?