¿Hay alguna razón de rendimiento para declarar los parámetros del método finales en Java?
Como en:
public void foo(int bar) { ... }
Versus:
public void foo(final int bar) { ... }
Suponiendo que bar
solo se lee y nunca se modifica en foo()
.
java
performance
final
Dormir
fuente
fuente
Respuestas:
La palabra clave final no aparece en el archivo de clase para variables y parámetros locales, por lo que no puede afectar el rendimiento en tiempo de ejecución. Su único uso es aclarar la intención de los codificadores de que la variable no se cambie (lo que muchos consideran una razón dudosa para su uso) y tratar con clases internas anónimas.
Hay muchos argumentos sobre si el modificador final en el método en sí tiene alguna ganancia de rendimiento, ya que el compilador optimizador integrará los métodos en tiempo de ejecución de todos modos, independientemente del modificador. En este caso, también debe usarse solo para restringir la invalidación del método.
fuente
El único beneficio de un parámetro final es que se puede usar en clases anónimas anidadas. Si un parámetro nunca se cambia, el compilador ya lo detectará como parte de su operación normal incluso sin el modificador final. Es bastante raro que los errores sean causados por la asignación inesperada de un parámetro; si sus métodos son lo suficientemente grandes como para necesitar este nivel de ingeniería, hágalos más pequeños; los métodos que llama no pueden cambiar sus parámetros.
fuente
Los compiladores que operan después de la carga de clases, como los compiladores JIT, pueden aprovechar los métodos finales. En consecuencia, los métodos declarados definitivos podrían tener algún beneficio en el rendimiento.
http://www.javaperformancetuning.com/tips/final.shtml
Oh y otro buen recurso
http://mindprod.com/jgloss/final.html
fuente
Solo un punto más que anterior al uso de variables locales no finales declaradas dentro del método: la instancia de la clase interna puede sobrevivir al marco de la pila, por lo que la variable local puede desaparecer mientras el objeto interno aún está vivo
fuente
Supongo que el compilador podría eliminar todas las variables finales estáticas privadas que tienen un tipo primitivo, como int, e incorporarlas directamente en el código como con una macro de C ++.
Sin embargo, no tengo ni idea de si esto se hace en la práctica, pero podría hacerse para ahorrar algo de memoria.
fuente