Maison >Java >javaDidacticiel >## L'appel de « array.length » dans une boucle for est-il un goulot d'étranglement en termes de performances ?

## L'appel de « array.length » dans une boucle for est-il un goulot d'étranglement en termes de performances ?

Mary-Kate Olsen
Mary-Kate Olsenoriginal
2024-10-26 00:38:02865parcourir

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

Le coût de l'appel de array.length

Lors du remplacement des boucles for par des boucles for-each, les développeurs rencontrent souvent le modèle suivant :

<code class="java">for (int i = 0, n = a.length; i < n; i++) {
    ...
}</code>

Au lieu du plus simple :

<code class="java">for (int i = 0; i < a.length; i++) {
    ...
}</code>

Cela soulève la question : l'affectation supplémentaire n = a.length est-elle un impact sur les performances des tableaux ?

La réponse

Non , un appel à array.length est une opération O(1) ou à temps constant.

La propriété .length d'un tableau est un membre final public et son accès n'est pas plus lent qu'une variable locale. Ceci est différent des appels de méthode comme size(), qui impliquent généralement plus de surcharge.

Les compilateurs JIT modernes peuvent également optimiser l'appel à .length pour l'éliminer complètement. Pour vérifier cela, on peut inspecter le code source du compilateur JIT ou examiner le code natif vidé.

Cependant, le compilateur JIT n'est pas toujours en mesure d'effectuer cette optimisation, par exemple lorsque le débogage est activé ou lorsque le corps de la boucle contient des variables locales excessives.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn