Pro e contro di JIT e AOT [chiuso]

5

In che modo la compilation "Just In Time" è migliore della compilation "Ahead Of Time"? E viceversa.

È AOT uguale alla compilazione nativa diretta?

    
posta Gulshan 07.04.2011 - 06:43
fonte

1 risposta

7

La compilazione just-in-time di solito utilizza informazioni di profilazione (come "quante volte è stato eseguito fino ad ora questo metodo") per determinare quanto deve essere compilato in modo aggressivo un determinato metodo e di solito è incluso nella piattaforma di esecuzione. Il JIT è stato messo a fuoco con le prime versioni di Java in quanto potevano fare solo un'interpretazione semplice, ma con ganci che consentivano il collegamento di moduli JIT esterni consentendo di vasti miglioramenti della velocità di esecuzione.

La compilazione anticipata è, a quanto mi consta, un termine coniato per integrare il concetto JIT, e di solito riflette una fase di compilazione fatta prima dell'esecuzione che raramente include informazioni di profilazione (quindi tutti i metodi sono compilati allo stesso modo). La fase di ottimizzazione è terminata in fase di esecuzione, quindi non è necessario essere presente al momento dell'esecuzione. Ciò significa che l'ambiente di esecuzione non deve essere grande quanto nell'ambiente JIT.

Uno dei grandi vantaggi della compilazione JIT, è che consente di indirizzare direttamente l'hardware esatto ad ogni esecuzione utilizzando cose come SSE3 o AltiVec, invece di dover compilare un sottoinsieme comune disponibile su tutte le piattaforme.

Si noti, tuttavia, che il processo JIT di solito è difficile da prevedere che cosa farà. In genere non riesci a capire come "ingannarlo" per fare qualcosa di speciale con il codice gnarly, poiché potrebbe cambiare nella prossima versione. Ciò significa che è molto importante scrivere codice semplice e pulito che dia al JIT le migliori condizioni possibili per fare il suo lavoro.

    
risposta data 07.04.2011 - 08:16
fonte

Leggi altre domande sui tag