È anche probabile che aiuti quando gli argomenti sono costanti, poiché puoi spesso eliminare interi percorsi di codice. Semplice esempio:
function foo(b:Bool) {
if (b) {
lots;
of;
code;
}
else {
and;
even;
more;
code;
}
}
Se b
è una costante, questo aiuta. Argomenti di pari entità int che sono limiti di loop possono consentire lo svolgimento del ciclo nel corpo inline, e cosa no.
Inoltre, le funzioni integrate semplificano l'analisi delle evasioni, che può quindi aiutarti a evitare l'allocazione.
La riduzione del costo di invocazione è di solito insignificante. Il vantaggio effettivo derivante dall'integrazione delle funzioni è rappresentato dalle successive opportunità di ottimizzazione che possono sorgere quando si elimina l'indirezione e si possono combinare le informazioni del sito di chiamata e del callee.
Se è possibile raggiungere prestazioni significative risparmiando i costi di chiamata, è molto probabile che le JIT siano in grado di integrare i metodi virtuali, poiché elimina tutta la procedura indiretta coinvolta nella ricerca vtable. Mentre è necessario memorizzare più codice nella cache, non è necessario caricare il vtable.