Existe-t-il une raison de performance pour déclarer les paramètres de méthode définitifs en Java?
Un péché:
public void foo(int bar) { ... }
Contre:
public void foo(final int bar) { ... }
En supposant que bar
est uniquement lu et jamais modifié dans foo()
.
Le mot-clé final n'apparaît pas dans le fichier de classe pour les variables et paramètres locaux, il ne peut donc pas affecter les performances d'exécution. Sa seule utilisation est de clarifier l'intention des codeurs de ne pas modifier la variable (que beaucoup considèrent comme une raison douteuse de son utilisation) et de traiter les classes internes anonymes.
Il y a beaucoup d'arguments sur la question de savoir si le dernier modificateur de la méthode elle-même a un gain de performances, car les méthodes seront de toute façon intégrées par le compilateur d'optimisation au moment de l'exécution, quel que soit le modificateur. Dans ce cas, il ne doit également être utilisé que pour restreindre le remplacement de la méthode.
Le seul avantage d'un paramètre final est qu'il peut être utilisé dans des classes imbriquées anonymes. Si un paramètre n'est jamais modifié, le compilateur le détectera déjà dans le cadre de son fonctionnement normal même sans le dernier modificateur. Il est assez rare que des bogues soient causés par un paramètre attribué de manière inattendue - si vos méthodes sont suffisamment grandes pour nécessiter ce niveau d'ingénierie, réduisez-les - les méthodes que vous appelez ne peuvent pas modifier vos paramètres.
Juste un point de plus qu'au-dessus de l'utilisation de variables locales non finales déclarées dans la méthode - l'instance de classe interne peut survivre au cadre de la pile, de sorte que la variable locale peut disparaître pendant que l'objet interne est toujours vivant
Les compilateurs qui fonctionnent après le chargement de classe, tels que les compilateurs JIT, peuvent tirer parti des méthodes finales. Par conséquent, les méthodes déclarées finales pourraient présenter certains avantages en termes de performances.
http://www.javaperformancetuning.com/tips/final.shtml
Oh et une autre bonne ressource