¿Hay algún motivo de rendimiento para declarar los parámetros del método como definitivos en Java?¿Hay alguna razón de rendimiento para declarar los parámetros del método como definitivos en Java?
Como en:
public void foo(int bar) { ... }
Versus:
public void foo(final int bar) { ... }
Suponiendo que bar
es de sólo lectura y nunca modificada en foo()
.
podría pensar que las variables/params finales podrían optimizarse como variables de bucle sin embargo ... pero un buen compilador/tiempo de ejecución debería ser capaz de resolver eso sin final de todos modos ... –
He visto el compilador de Sun emitir bytecode ligeramente más corto cuando el único diff La diferencia entre los dos métodos ha sido la "finalidad" de las variables locales. Las micro-optimizaciones son reales, y los compiladores realmente las hacen. Lo que realmente importa, por supuesto, es qué hace el JIT con el bytecode, y las referencias locales pierden su "finalidad" cuando se compilan en bytecode. Creo que esta es la razón por la cual hay tanta especulación sobre las variables locales finales: es bastante determinista cuáles son los resultados. Sin embargo, el uso de locales finales puede afectar el bytecode, por lo que vale. –
Como no es determinista, tampoco hay forma de depender de la optimización. Por supuesto, puede haber cambiado mucho en las implementaciones de VM desde la respuesta original en 2008 ;-) – Robin