.NET JIT是否优化了空循环?

时间:2009-02-11 22:02:47

标签: c# .net performance jit

This article另有建议。但是仍然需要评估循环条件。 java只是使用特定技巧来识别这种情况吗?

5 个答案:

答案 0 :(得分:3)

查看您引用文章的follow-up story

回答人们的注意事项:看来OP正在询问.NET JIT,而不是Java JIT,因为引用的文章表明Java做得更好(或者只做了Java)优化了空循环。 / p> 编辑:谷歌搜索更多答案,Jon Skeet的名字不断涌现。例如,请参阅this thread on C# optimizations。因此,当他回答时,我们将获得权威的答案! : - )

答案 1 :(得分:0)

是的。

http://www.javaspecialists.eu/archive/Issue158.html

至少在Java 5和6中。您链接的文章是关于较旧的VM。

答案 2 :(得分:0)

这篇文章是从2003年开始的。从那时起,CLI(和java VMs)已经取得了很大的进步。通常,在进行微基准测试时,您必须非常谨慎。最终测量jit性能,编译器在删除死代码时的效率,计时开销,垃圾收集等等都非常容易。

答案 3 :(得分:0)

Java并不总是优化空循环方式。在这种情况下,计算4个BN数字需要2.966秒。

long start = System.nanoTime();
for (int i = Integer.MIN_VALUE; i < Integer.MAX_VALUE; i++);
long time = System.nanoTime() - start;
System.out.printf("Took %.3f seconds to empty loop.%n", time * 1e-9);

打印

Took 2.966 seconds to empty loop.

这是使用Java 6u11,也许6u14会更聪明。

答案 4 :(得分:-1)

一般情况下,尽可能简单地编写代码,以便JVM可以很好地猜测你要做的事情。