Подтвердить что ты не робот

Почему цикл декремента работает быстрее, чем цикл инкремента?

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

for(int i = 100000; i > 0; i--) {}
for(int i = 1; i < 100001; i++) {}
4b9b3361

Ответ 1

Это связано с тем, что при сравнении байт-кода с 0 выполняется другая операция, чем сравнение с ненулевым числом. Фактически i < 10001 требует сначала загрузить номер в стек, а затем выполнить сравнение, а i > 0 выполняется как одна операция. Разумеется, в большинстве случаев не будет разницы в скорости из-за оптимизации JVM. Но мы можем попытаться сделать это видимым, запустив код с опцией -Xint (только для интерпретируемого режима).

Ответ 2

Пиюш Бхардвадж

Я тестировал оба цикла в онлайн-компиляторе, но мой цикл инкремента выполняется быстрее, чем цикл уменьшения.

Исполнение программы зависит от многих факторов. Иногда мы запускаем одну и ту же программу на одном компьютере много раз, мы получаем разные сроки выполнения. Это зависит от многих факторов.

См. результаты

for(int i = 1; i < 100001; i++) {

}

Цикл увеличения - http://ideone.com/irdY0e

for(int i = 100000; i > 0; i--) {

}

Цикл сокращения - http://ideone.com/yDO9Jf

Сэр Евгений Дорофеев дал отличное объяснение, которое может дать только эксперт.

Наконец, вам нужно учитывать производительность вашего процессора. При рассмотрении контрольного показателя для определения общей производительности приложения Java учитывайте, что выполнение байт-кода, выполнение собственного кода и графика играют роль. Их влияние варьируется в зависимости от характера конкретного применения.