在以下代码中:
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);
我正在尝试计算在我的机器上执行简单操作所需的时间。
所有高达19的幂的计算都会增加运行此代码所需的时间,但是当我超过19(达到max int值31)时,我惊讶地发现它对它的时间没有影响需要。 它总是在我的机器上显示5毫秒!!!
这怎么可能?
答案 0 :(得分:12)
您刚刚目睹了HotSpot将您的整个循环优化为遗忘。这是智能。你需要在循环中做一些真正的动作。我建议引入int
累加器var并对其执行一些按位操作,最后打印结果以确保在循环后需要它。
答案 1 :(得分:2)
在HotSpot JVM上,默认为-XX:CompileThreshold=10000
。这意味着迭代10K次的循环可以触发整个方法的优化。在您的情况下,您需要计算检测和编译(在后台)您的方法所需的时间。
答案 2 :(得分:0)
在循环中使用另一个System.nanoTime()。没有人可以优化这一点。
for(int i = 0; i < max; ){
i++;
dummy+=System.nanoTime();
}
不要忘记这样做:
System.out.println(dummy);
循环后。确保非优化