为什么右移比JAVA中的除法更好?

时间:2015-04-21 06:40:27

标签: java jit

众所周知,JIT将优化部门以获得更好的表现。 但是当我试图计算分裂和右移费用的时间时:

long j=0;
long a1=Calendar.getInstance().getTimeInMillis();
for (long i = 0; i < 999999999l; i++) {
        j=i/2;//or j=i>>1;
}
long a2=Calendar.getInstance().getTimeInMillis();
System.out.println(a2-a1);

结果: J = I / 2; 1070ms J =&GT;大于1; 702ms

我在不同的平台上试用,但效果非常相似:右移表现更好。 为什么JVM或JIT不将/ 2转换为&gt;&gt; 1以获得更好的性能?


谢谢大家。似乎如果dividend是变量,编译器将不会进行优化。我将被除数改为常数,结果显示/ 2和&gt;&gt; 1执行等效。 PS。谢谢,System.currentTimeMillis()更好。

0 个答案:

没有答案