tipo setfont para lista letra instalar fuentes font example descargar agregar java performance

para - setfont java



¿Hay algún motivo de rendimiento para declarar los parámetros del método como definitivos en Java? (7)

El único beneficio para un parámetro final es que puede usarse 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 a los que llama no pueden cambiar sus parámetros.

¿Hay algún motivo 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) { ... }

Asumiendo que la bar solo se lee y nunca se modifica en foo() .


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 modifique (lo que muchos consideran una razón dudosa para su uso) y tratar con clases internas anónimas.

Existe una gran cantidad de argumentos sobre si el modificador final en el método en sí tiene alguna ganancia de rendimiento, ya que los métodos estarán incluidos por el compilador de optimización en el tiempo de ejecución de todos modos, independientemente del modificador. En este caso, también debería usarse solo para restringir la anulación del método.



No puedo pensar en una razón por la cual al compilador le importaría si declarara un parámetro de método final o no.

Pero la verdadera respuesta a esta pregunta es: escribir dos funciones, una con parámetros finales y otra con parámetros regulares. Ejecútelos un millón de veces cada uno y vea si hay alguna diferencia de tiempo de ejecución notable.

Si le preocupa el rendimiento, es muy importante hacer un trabajo de creación de perfiles sobre su código y averiguar exactamente qué es lo que le está ralentizando. Es casi seguro que no es lo que esperarías que fuera :)


Solo un punto más que el anterior que utiliza 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.


Sugeriría que nunca escribas micro benchmarks. Usted no sabe qué optimización puede hacer el JIT y cuándo, y es probable que tenga una idea equivocada de cómo se comporta simplemente haciendo un "caso de prueba simple"


Supongo que el compilador posiblemente podría eliminar todas las variables finales estáticas privadas que tienen un tipo primitivo, como int, y alinearlas directamente en el código al igual que con una macro de C ++.

Sin embargo, no tengo idea de si esto se hace en la práctica, pero podría hacerse para ahorrar algo de memoria.