Inlining è un'ottimizzazione eseguita dal compilatore Java Just-In-Time.
Se si dispone di un metodo:
public int addPlusOne(int a, int b) {
return a + b + 1;
}
che si chiama in questo modo:
public void testAddPlusOne() {
int v1 = addPlusOne(2, 5);
int v2 = addPlusOne(7, 13);
// do something with v1, v2
}
il compilatore può decidere di sostituire la chiamata di funzione con il corpo della funzione, quindi il risultato sarebbe assomigliare in questo modo:
public void testAddPlusOne() {
int v1 = 2 + 5 + 1;
int v2 = 7 + 13 + 1
// do something with v1, v2
}
Il compilatore fa questo per salvare il sovraccarico o f effettivamente facendo una chiamata di funzione, il che implicherebbe spingere ogni parametro nello stack.
Questo può chiaramente essere fatto solo per le funzioni non virtuali. Considera cosa succederebbe se il metodo fosse sovrascritto in una sottoclasse e il tipo dell'oggetto contenente il metodo non fosse noto fino al runtime ... come sarebbe il compilatore a sapere quale codice copiare: il corpo del metodo della classe base o della sottoclasse metodo del corpo? Poiché tutti i metodi sono virtuali per impostazione predefinita in Java, è possibile contrassegnare esplicitamente quelli che non possono essere sostituiti come final
(o inserirli in una classe final
). Ciò aiuterà il compilatore a capire che il metodo non sarà mai sovrascritto, ed è sicuro inserirlo in linea. (Si noti che talvolta il compilatore può effettuare questa determinazione anche per i metodi non definitivi.)
Inoltre, la parola può essere nella citazione. Non è garantito che i metodi finali siano integri. Esistono vari modi per garantire che un metodo non sia in grado di essere sottolineato, ma non è possibile forzare il compilatore in linea. Quasi sempre lo saprà meglio di te quando l'inline aiuterà a ridurre la velocità del codice risultante.
Vedere wikipedia per una buona panoramica di vantaggi e problemi.
fonte
2010-10-13 14:59:59
Questo sarà di aiuto: http://java.sun.com/developer/onlineTraining/Programming/JDCBook/perf2.html#vm – codaddict