【发布时间】:2009-02-11 22:02:46
【问题描述】:
This article 另有建议。但是仍然需要评估循环条件。 java 是否只是采用特定的技巧来识别这种情况?
【问题讨论】:
-
您可以判断您手头是否有 C# 编译器。如果你不这样做,我想知道你对优化有什么兴趣?
-
也许我远离带有 C# 编译器的计算机? :)
标签: c# .net performance jit
This article 另有建议。但是仍然需要评估循环条件。 java 是否只是采用特定的技巧来识别这种情况?
【问题讨论】:
标签: c# .net performance jit
查看您引用的文章的follow-up story。
回答的人注意:看来 OP 询问的是 .NET JIT,而不是 Java JIT,因为引用的文章表明 Java 在优化空循环方面做得更好(或者只有 Java 做得更好。
编辑:谷歌搜索更多答案,Jon Skeet 的名字不断出现。例如,参见this thread on C# optimizations。因此,当他回答时,我们将有权威的答案! :-)
【讨论】:
【讨论】:
这篇文章来自 2003 年。从那时起,CLI(和 java VM)有了很大的进步。一般来说,在进行微基准测试时,您必须非常谨慎。最终测量 jit 性能、消除死代码时的编译器效率、时序开销、垃圾收集等非常容易。
【讨论】:
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会更聪明。
【讨论】:
一般来说,尽可能简单地编写代码,以便 JVM 可以很好地猜测您要执行的操作。
【讨论】: