Java中奇怪的代码计时行为

Ily*_*man 3 java

在以下代码中:

long startingTime = System.nanoTime();
int max = (int) Math.pow(2, 19);
for(int i = 0; i < max; ){
    i++;
}
long timePass = System.nanoTime() - startingTime;
System.out.println("Time pass " + timePass / 1000000F);
Run Code Online (Sandbox Code Playgroud)

我正在尝试计算在我的机器上执行简单操作所需的时间.

所有高达19的幂的计算都会增加运行此代码所需的时间,但当我超过19(达到max int值31)时,我惊讶地发现它对所需的时间没有影响.它总是在我的机器上显示5毫秒!

怎么会这样?

Mar*_*nik 12

您刚刚目睹了HotSpot将您的整个循环优化为遗忘.这很聪明.你需要在循环中做一些真正的动作.我建议引入一个int累加器var并对其进行一些按位操作,最后打印结果以确保在循环后需要它.