众所周知,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()更好。