«Если рабочий хочет хорошо выполнять свою работу, он должен сначала заточить свои инструменты» — Конфуций, «Аналитики Конфуция. Лу Лингун»
титульная страница > программирование > ## Является ли вызов `array.length` в цикле for узким местом производительности?

## Является ли вызов `array.length` в цикле for узким местом производительности?

Опубликовано 7 ноября 2024 г.
Просматривать:741

## Is Calling `array.length` in a for Loop a Performance Bottleneck?

Стоимость вызова array.length

При замене циклов for на циклы for-each разработчики часто сталкиваются со следующей закономерностью:

for (int i = 0, n = a.length; i 

Вместо простого:

for (int i = 0; i 

В связи с этим возникает вопрос: является ли дополнительное присвоение n = a.length снижением производительности массивов?

Ответ

Нет, вызов array.length операция O(1) или постоянного времени.

Свойство .length массива является общедоступным конечным элементом, и доступ к нему не медленнее, чем к локальной переменной. Это отличается от вызовов таких методов, как size(), которые обычно требуют больше накладных расходов.

Современные JIT-компиляторы также могут оптимизировать вызов .length, чтобы полностью исключить его. Чтобы убедиться в этом, можно проверить исходный код JIT-компилятора или изучить дамп собственного кода.

Однако JIT-компилятор не всегда может выполнить такую ​​оптимизацию, например, когда включена отладка или когда тело цикла содержит лишние локальные переменные.

Последний учебник Более>

Изучайте китайский

Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.

Copyright© 2022 湘ICP备2022001581号-3