2016-02-29 1 views
2

Поскольку оператор if уже оценивается, добавляет ли оператор else какое-либо влияние на производительность?В Java, добавляет ли инструкция else (после уже использованного if) выполнить больше времени?

Практический пример:

if(updateTime >= updateIncrement) 
{ 
    update(); 
    updateTime = 0; 
} 
else 
    updateTime+=deltaTime; 

против:

if(updateTime >= updateIncrement) 
{ 
    update(); 
    updateTime = -deltaTime; 
} 
updateTime+=deltaTime; 

Edit: Чтобы уточнить, я не ищу микро оптимизации, это просто гипотетический «How Stuff работы «вид вопроса

+0

Если вы действительно думаете, что разница в производительности между двумя значительна (что я сомневаюсь): 1) Попробуйте декомпилировать байт-код для двух, чтобы увидеть, есть ли существенное различие; 2) microbenchmark ваш код. –

+1

Фрагмент с выражением else гораздо читабельнее. Поэтому вы должны выбрать его. – Eran

+0

@Eran вы удалили свой комментарий, сказав, что у двух есть другое поведение - это было правдой, так как мы не знаем значения 'deltaTime'. –

ответ

6

В первую очередь вы всегда должны указывать для ясности. Первый пример, более ясно, что он делает.

JVM оптимизируется на основе библиотеки шаблонов, которая знает, как оптимизировать. Это означает, что в целом, если вы используете общие простые идиомы, JIT будет работать лучше. Есть исключения, но вы должны предположить, что, если вы не профилировали этот код, и это проявилось в качестве проблемы, не стоит усложнять ваш код «микро-настройкой».

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

+0

Это то, что я тоже подумал, компилятор так или иначе введет его, так что «лишний объезд» будет либо добавлен в ветвь if (false), либо пропущен в ветке if (true). Это правильный способ мышления? –

+0

@ p.streef Я не уверен, что полезно попытаться представить, что может сделать JIT. Примечание. Процессор x64 имеет инструкцию условного перемещения, поэтому if/else может не иметь какого-либо ветвления. В любом случае процессор имеет предсказание ветвления, поэтому, как только код будет запущен, условие, которое не было выполнено, ничего не будет стоить. –

Смежные вопросы