我想知道为什么运行长索引循环与整数索引循环需要更长的时间?
有什么想法吗?
谢谢
int n = 1000_000_000;
long n2 =n;
long t1 = System.currentTimeMillis();
for( int idx = 0; idx<n;idx++){
}
long t2 = System.currentTimeMillis();
for( long idx = 0; idx<n2;idx++){
}
long t3 = System.currentTimeMillis();
long dt1 = t2-t1;
long dt2 = t3-t2;
System.out.println("with int = took " + dt1 +"ms");
System.out.println("with long = took " + dt2 +"ms");
最佳答案
这可能与您的 JVM 使用的字长有关。对于 32 位字大小,int
将需要 1 个字来存储,而 long
将需要 2 个字来存储。因此,读取 long
值基本上是 2 次读取,而写入它们又是 2 次写入。
还有一点就是增量操作。 JVM 规范 doesn't have any instruction set对于long
类型增量。它有 iinc
,但没有 linc
。因此,增量操作也必须经过 iinc(可能再次使用 2 个单词,也可能导致 2 个 iinc 操作)。总而言之,long
类型的算术比 int
类型的算术稍微复杂一些。但当然不应该有太多的担忧。我想这些可能是导致结果稍慢的原因。
关于java - 整数与长索引的性能循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29332464/