class A {
final int foo() { return 3; }
}
Dada esta clase, cualquier llamada a foo() se puede reemplazar con la constante "3". Cualquier máquina virtual Java1 puede hacer esto, porque la palabra clave final explícitamente dicta que no es posible tener una subclase que anule "int foo()".
Inlining El método proporciona las siguientes ventajas en el sitio de llamada:
- Ningún método llamada
- No envío dinámico
- Posible constante veces el valor, por ejemplo. "a.foo() + 2" se convierte en 5 sin código ejecutado en
runtime.
En el pasado, los programadores suelen insertar la palabra clave última exactamente por esta razón. O para facilitar mejor la creación y aumentar la velocidad de ejecución, combinarían muchos métodos más pequeños en un método más grande. Pero en muchos sentidos, tales técnicas derrotan a toda la instalación de modularización y reutilización integrada en el lenguaje de programación.
JVM moderna, al igual que Java HotSpot VM es capaz de alinear la clase sin el final. palabra clave**.
(http://java.sun.com/developer/technicalArticles/Networking/HotSpot/inlining.html)
En realidad, HotSpot puede alinear métodos (especulativamente) incluso si se reemplaza, y llamar al método virtualmente para objetos que no son del tipo esperado. Server HotSpot incluso incluirá dos versiones diferentes de un método (en línea bimorfa). –
@Tom: ¿Te importaría incluir eso en la respuesta? –
Bueno, definitivamente tuve casos donde el hotspot no estaba en línea y la incorporación manual condujo a una mejora del factor 5 en el rendimiento de un ciclo de procesamiento central. –