java - 整数与长索引的性能循环

标签 java for-loop integer long-integer

我想知道为什么运行长索引循环与整数索引循环需要更长的时间?

有什么想法吗?

谢谢

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/

相关文章:

opencv - 如何停止for循环(OpenCV)

sql - PostgreSQL:如何将带有 float 的字符串转换为整数?

c - 如何左对齐 32 位整数?

java - 无法解析 R.array.items 中的 "array"(android studio)

java - Java-异常为方法返回类型,并且Error抛出声明的一部分

java - 在 JMenuBar 中添加元素之间的间距

java - 似乎无法检索 ExifSubIFDDirectory

python - 使用 tkinter 在带有 for 语句的标签中显示图片,可以做到吗?

java ;整数 [] 到整数

c# - C#中的指针三角形