Maison >Java >javaDidacticiel >Pourquoi ArrayBlockingQueue utilise-t-il des variables finales locales pour l'optimisation des performances ?
ArrayBlockingQueue : variables finales locales pour l'optimisation des performances
Dans la classe ArrayBlockingQueue, il est à noter que certaines méthodes copient les champs membres dans des variables finales locales avant invoquant des opérations critiques.
Par exemple, dans l'offre() method:
public boolean offer(E e) { ... final ReentrantLock lock = this.lock; lock.lock(); ... }
Ici, this.lock est copié dans le verrou de variable local. Cette pratique s'étend également à d'autres champs membres, tels que les éléments E[] dans la méthode extract().
On pourrait s'interroger sur la nécessité de ces copies locales, étant donné que les champs membres sont déjà déclarés comme finaux. Cependant, une subtile optimisation des performances est en jeu.
Selon Doug Lea, l'auteur de la classe, la copie vers des variables locales produit un bytecode plus petit. Pour le code de bas niveau, cette optimisation peut réduire légèrement la surcharge associée à la récupération et à l'utilisation des champs membres, en particulier pour les méthodes fréquemment invoquées.
Comme indiqué dans un fil de discussion de la liste de diffusion core-libs-dev, cette optimisation " produit le plus petit bytecode, et c'est bien d'écrire du code un peu plus proche de la machine."
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!