Prenons l'exemple suivant:Où sont stockées les variables locales finales Java?
public void init() {
final Environment env = new Environment();
Runtime.getRuntime().addShutdownHook(new Thread() {
public void run() {
env.close();
}
});
}
Tout d'abord, où est stocké env
? Est-ce:
- copié par le compilateur dans une variable membre cachée de la classe interne qui y fait référence
- copié et référencé sur le tas
- à gauche sur la pile et en quelque sorte il référencé
- autre chose
Mon estimation est la première option. Ensuite, faites les problèmes de performance qui en découlent (plutôt que de simplement créer env
en tant que variable membre de la classe et en la référençant comme telle) en particulier si vous créez un grand nombre de ces constructions de classe interne qui référencent le local final. variables
Alors, est-ce que je peux supposer qu'il n'y a aucun problème de performance qui en résulte? – Joel
Mon bogue personnel dans ce domaine est que les références à l'instance externe (utilisées pour accéder aux champs, pas aux variables, qui sont copiées) peuvent poser problème, si elles ne sont pas nécessaires: http://stackoverflow.com/questions/ 758570/is-it-it-to-anonymous-inner-classes-in-java-static – Thilo
par rapport à la référence en tant que variable membre. Si c'est copié, alors, mon hypothèse est qu'il n'y a aucune implication de performance. – Joel