Le coût de performance de l'accès à « array.length »
Q : L'appel de « array.length » est-il plus coûteux en calcul que accéder à une variable normale ?
Dans le but d'optimiser le code en convertissant les boucles for en boucles for-each, de nombreux développeurs rencontrent des constructions telles que :
for (int i = 0, n = a.length; i < n; i++) { ... }
où a est un tableau . Certains se demandent si l'initialisation de n avec a.length introduit des pénalités de performances par rapport à l'omission complète de n :
for (int i = 0; i < a.length; i++) { ... }
A : Non, l'appel de "array.length" a un temps constant (O(1)) cost.
Contrairement à la méthode size() des collections, qui entraîne une surcharge de performances à chaque invocation, accéder à array.length équivaut à lire une variable locale. En effet, array.length est un membre final public de la classe array et est donc aussi rapide d'accès que n'importe quelle autre variable.
Optimisation par les compilateurs JIT
Modern Les compilateurs Just-In-Time (JIT) optimisent souvent les appels à array.length en les éliminant complètement. En effet, le compilateur peut déterminer que la longueur du tableau reste constante tout au long de l'exécution de la boucle.
Confirmation via l'analyse de code
L'efficacité de l'accès à array.length peut être vérifié en examinant le code natif généré par le compilateur JIT de la JVM. Dans la plupart des cas, l'appel à array.length sera optimisé.
Exceptions à la règle
Il existe quelques scénarios dans lesquels le compilateur JIT peut ne pas être en mesure pour optimiser l'accès à array.length :
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!