Inline es una optimización realizada por el compilador Java Just-In-Time.
Si usted tiene un método:
public int addPlusOne(int a, int b) {
return a + b + 1;
}
que llaman de esta manera:
public void testAddPlusOne() {
int v1 = addPlusOne(2, 5);
int v2 = addPlusOne(7, 13);
// do something with v1, v2
}
el compilador puede decidir reemplazar su llamada a la función con el cuerpo de la función, por lo que el resultado sería efectivamente se ve así:
public void testAddPlusOne() {
int v1 = 2 + 5 + 1;
int v2 = 7 + 13 + 1
// do something with v1, v2
}
El compilador hace esto para ahorrar la sobrecarga f en realidad hacer una llamada a función, lo que implicaría presionar cada parámetro en la pila.
Esto solo se puede hacer claramente para funciones no virtuales. Considere lo que sucedería si el método fuera anulado en una subclase y el tipo del objeto que contiene el método no se conoce hasta el tiempo de ejecución ... ¿cómo sabría el compilador qué código copiar: el cuerpo del método de la clase base o la subclase cuerpo del método? Dado que todos los métodos son virtuales por defecto en Java, puede marcar explícitamente aquellos que no pueden anularse como final
(o ponerlos en una clase final
). Esto ayudará al compilador a descubrir que el método nunca será anulado y que es seguro realizar la alineación. (Tenga en cuenta que el compilador a veces también puede hacer esta determinación para métodos no finales.)
Además, tenga en cuenta que la palabra puede en la cita. No se garantiza que los métodos finales sean alineables. Hay varias maneras en que puede garantizar que un método no sea capaz de estar en línea, pero no hay manera de forzar el compilador en línea. Casi siempre sabrá mejor que usted de todos modos cuando inline ayudará o perjudicará la velocidad del código resultante.
Consulte wikipedia para obtener una buena descripción de los beneficios y problemas.
Esto será de ayuda: http://java.sun.com/developer/onlineTraining/Programming/JDCBook/perf2.html#vm – codaddict