Il compilatore AOT
La compilazione AOT (ahead - of - time) consente la compilazione di classi Java™ in codice nativo per le successive esecuzioni dello stesso programma. Il compilatore AOT funziona con il framework di condivisione dati della classe.
Il compilatore AOT genera il codice nativo in modo dinamico mentre un'applicazione esegue e memorizza nella cache qualsiasi codice AOT generato nella cache di dati condivisa. Le JVM successive che eseguono il metodo possono caricare e utilizzare il codice AOT dalla cache di dati condivisa senza incorrere nella diminuzione delle prestazioni riscontrata con il codice nativo compilato JIT.
Il compilatore AOT è abilitato per impostazione predefinita, ma è attivo solo quando sono abilitate classi condivise. Per impostazione predefinita, le classi condivise sono disabilitate in modo che non si verifichi alcuna attività AOT. Quando il compilatore AOT è attivo, il compilatore seleziona i metodi da compilare con AOT con l'obiettivo primario di migliorare il tempo di avvio.
In una JVM senza un compilatore AOT o con il compilatore AOT disabilitato, il compilatore JIT compila selettivamente i metodi utilizzati frequentemente nel codice nativo ottimizzato. Esiste un costo di tempo associato ai metodi di compilazione poiché il compilatore JIT opera mentre l'applicazione è in esecuzione. Poiché i metodi iniziano con l'interpretazione e la maggior parte delle compilazioni JIT si verifica durante l'avvio, i tempi di avvio possono essere aumentati.
Le prestazioni di avvio possono essere migliorate utilizzando il codice AOT condiviso per fornire codice nativo senza compilazione. C'è un piccolo costo di tempo per caricare il codice AOT per un metodo dalla cache di dati condivisa e collegarlo in un programma in esecuzione. Il costo del tempo è basso rispetto al periodo di tempo impiegato dal compilatore JIT per compilare tale metodo.
L'opzione -Xshareclasses può essere utilizzata per abilitare le classi condivise, che potrebbero attivare anche il compilatore AOT se AOT è abilitato.