Tome el ejemplo siguiente:¿Dónde se almacenan las variables locales finales de Java?
public void init() {
final Environment env = new Environment();
Runtime.getRuntime().addShutdownHook(new Thread() {
public void run() {
env.close();
}
});
}
En primer lugar, en donde se almacenan env
? Es:
- copiado por el compilador en una variable miembro oculto de la clase interna que hace referencia a que
- copia en, y se hace referencia en adelante, el montón
- izquierda en la pila y de alguna manera hace referencia no
- algo más
Mi suposición es la primera opción.
En segundo lugar, haga cualquier problema de rendimiento que surja al hacer esto (en lugar de simplemente crear env
como una variable miembro de la clase y hacer referencia a ella como tal) particularmente si está creando un gran número de construcciones de clase interna que hacen referencia variables.
Entonces, ¿puedo suponer que no surgen problemas de rendimiento al hacer esto? – Joel
Mi preocupación personal en esta área es que las referencias a la instancia externa (utilizada para acceder a los campos, no a las variables, que se copian) pueden ser un problema, si no son necesarias: http://stackoverflow.com/questions/ 758570/is-it-possible-to-make-anonymous-inner-classes-in-java-static – Thilo
en comparación con la referencia como una variable miembro. Si se copia, entonces, mi suposición es que no hay implicaciones de rendimiento. – Joel