Быстрее объявить один раз и обновить значение, вместо того, чтобы объявлять каждое обновление?

1

Мне было интересно, объявлять ли переменную один раз (вне цикла), а затем изменять ее значение на каждой итерации цикла, быстрее, чем объявлять переменную в той же строке, что и обновление ее значения (внутри цикла), которое затем объявляет переменную каждая итерация цикла.

С одной стороны, я не буду жертвовать даже 1 тактовой частотой процессора, но с другой стороны, мне нравится, чтобы мой код был как можно короче.

Спасибо!

  • 2
    Походит на микрооптимизацию. Спросите себя: «Где будет использоваться эта переменная?» Затем объявите его в максимально возможной области видимости, чтобы его можно было использовать только там, где это необходимо. Если вам нужно только внутри цикла, объявите его в цикле
  • 2
    «С одной стороны, я не буду жертвовать даже 1 тактовой частотой процессора» - правда? Вы обнаружили, что единственный способ удовлетворить ваши определенные критерии производительности - это микрооптимизировать каждую строку вашего кода, независимо от читабельности (что не то же самое, что код «максимально короткий»)?
Показать ещё 2 комментария
Теги:
loops
variables

2 ответа

2
Лучший ответ

С точки зрения производительности это не имеет никакого значения, поэтому просто пойдите в зависимости от того, какой вариант имеет более читабельность для вас.
Зачем? Когда код скомпилирован, к нему применяется множество оптимизаций, чтобы перевести его в машинный код. В конце переменная является только зарезервированной позицией в памяти, поэтому предположим, что вы объявляете переменную внутри цикла. В этом случае компьютер должен "резервировать" позицию памяти каждый раз, когда вы зацикливаете, поэтому вы будете тратить процессорные часы на каждой итерации цикла. Но, как уже упоминалось, к коду применяется множество статических оптимизаций, поэтому резервирование памяти будет выведено из цикла при компиляции кода.
Здесь вы можете найти объяснение с более ясным примером:
http://en.wikipedia.org/wiki/Loop-invariant_code_motion
Но в основном современные компиляторы оптимизируют практически все, что обнаруживается при анализе статического кода.

0

Возможно, лучше задать вопрос, почему вам нужна эта оптимизация?

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

Даже в сложном игровом движке я бы не хотел тратить время на такие микро-оптимизации, как это было, если бы это был метод, который назывался 60+ раз в секунду, где я мог бы продемонстрировать посредством тестирования значительное влияние оптимизации.

В ситуации, когда я буду использовать Java, такого рода оптимизации не стоит того времени, которое они набирают для ввода.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню