Оптимизирует ли .NET JIT пустые циклы? - PullRequest
2 голосов
/ 12 февраля 2009

Эта статья предлагает иное. Но все еще необходимо оценить состояние цикла. Использует ли java конкретный трюк для распознавания этого случая?

Ответы [ 5 ]

3 голосов
/ 12 февраля 2009

Ознакомьтесь с последующей историей к статье, которую вы цитируете.

ПРИМЕЧАНИЕ для людей, отвечающих: Похоже, что ОП спрашивает о .NET JIT, а не о Java JIT, так как в упомянутой статье говорилось, что Java лучше (или только на Java) оптимизировала пустые циклы. 1005 *

РЕДАКТИРОВАТЬ: В поисках ответов, имя Джона Скита продолжает появляться. См., Например, эту тему по оптимизации C # . Таким образом, когда он ответит, у нас будет авторитетный ответ! : -)

0 голосов
/ 13 февраля 2009

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 будет умнее.

0 голосов
/ 12 февраля 2009

Статья написана в 2003 году. С тех пор CLI (и виртуальные машины Java) значительно продвинулись вперед. В общем, вы должны быть очень осторожны, когда делаете микро тесты. Измерение производительности jit, эффективности компилятора при удалении мертвого кода, издержек синхронизации, сборки мусора и т. Д. Действительно просто.

0 голосов
/ 12 февраля 2009

Да, будет.

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

По крайней мере в Java 5 и 6. Ссылка на статью о старой виртуальной машине.

0 голосов
/ 12 февраля 2009

В общем, старайтесь писать свой код так просто, как только можете, чтобы JVM смогла догадаться, что вы пытаетесь сделать.

...