Recientemente me encontré con una clase que tenía el siguiente campo declaradas:diferencias de rendimiento entre los campos primitivos finales estáticos y no estáticos en Java
private final int period = 1000;
En este caso particular, el autor tenía la intención de que sea también estático y dado que el valor no podía ser alterado en ningún momento, no había una razón funcional real para no declararlo estático, pero me hizo preguntarme cómo trata Java las primitivas estáticas finales vs. finales.
En particular:
1) ¿Cómo se almacenan los primitivos estáticas finales? ¿Están simplemente compilados directamente en las expresiones en las que se usan?
2) Si realmente se les asigna almacenamiento, ¿cada instancia de la clase contenedora debe mantener una referencia a esa ubicación? (en cuyo caso, para primitivas de menos de 4 bytes, cada instancia de la clase sería más grande que si simplemente incluyera la primitiva directamente como lo haría en el caso no estático)
3) ¿Son ahora los compiladores inteligentes? suficiente para determinar que en casos como el anterior, la variable es 'efectivamente estática' ya que sería imposible tener instancias diferentes que contengan valores diferentes y por lo tanto optimizarla de manera similar a una estática final?
Re: n. ° 3, en realidad no esperaba diferencias de rendimiento en cuanto a la velocidad, pero no sabía si mi optimización no la almacenaba por instancia. a la actual campos estáticos finales. En retrospectiva, la diferencia de rendimiento es probablemente un nombre inapropiado. Gracias por la aclaración – Dusty