Disabilitazione del compilatore JIT o AOT
Se si sospetta che si stia verificando un problema nel compilatore JIT o AOT, disattivare la compilazione per verificare se il problema persiste. Se il problema persiste, si sa che il compilatore non ne è la causa.
Informazioni su questa attività
Il compilatore JIT è abilitato per impostazione predefinita. Anche il compilatore AOT è abilitato per impostazione predefinita, ma è attivo solo quando sono abilitate le classi condivise (per ulteriori informazioni sulle classi condivise, consultare Introduzione alla condivisione dei dati delle classi nella documentazione utente di OpenJ9 ). Per motivi di efficienza, non tutti i metodi in un'applicazione Java™ vengono compilati. La JVM conserva un conteggio delle chiamate per ogni metodo nell'applicazione; ogni volta che un metodo viene richiamato e interpretato, il conteggio delle chiamate per tale metodo viene incrementato. Quando il conteggio raggiunge la soglia di compilazione, il metodo viene compilato ed eseguito in modo nativo.
Il meccanismo di conteggio delle chiamate diffonde la compilazione dei metodi per tutto il ciclo di vita di un'applicazione, dando maggiore priorità ai metodi utilizzati più di frequente. Alcuni metodi utilizzati raramente potrebbero non essere mai compilati. Come risultato, quando un programma Java ha esito negativo, il problema potrebbe essere nel compilatore JIT o AOT o potrebbe essere altrove nella JVM.
Il primo passo nella diagnosi dell'errore consiste nel determinare dove si trova il problema. Per fare ciò, è necessario prima eseguire il programma Java in modalità puramente interpretata (cioè, con i compilatori JIT e AOT disabilitati).
Procedura
- Rimuovere le opzioni -Xjit e -Xaot (e i parametri di accompagnamento) dalla riga di comando.
- Utilizzare l'opzione della riga comandi -Xint per disabilitare i compilatori JIT e AOT.Per motivi di prestazioni, non utilizzare l'opzione -Xint in un ambiente di produzione.
Cosa fare successivamente
L'esecuzione del programma Java con la compilazione disabilitata porta a una delle seguenti situazioni:
- Il fallimento rimane. Il problema non è nel compilatore JIT o AOT. In alcuni casi, il programma potrebbe iniziare ad avere esito negativo in modo diverso; tuttavia, il problema non è correlato al compilatore.
- L'errore scompare. Il problema è molto probabile nel compilatore JIT o AOT.Se non si utilizzano classi condivise, il compilatore JIT è in errore. Se si stanno utilizzando classi condivise, è necessario determinare quale compilatore è in errore eseguendo l'applicazione solo con la compilazione JIT abilitata. Eseguire l'applicazione con l'opzione -Xnoaot invece dell'opzione -Xint . Ciò porta a una delle situazioni seguenti:
- Il fallimento rimane. Il problema è nel compilatore JIT. È anche possibile utilizzare -Xnojit invece dell'opzione -Xnoaot per assicurarsi che solo il compilatore JIT sia in errore.
- L'errore scompare. Il problema è nel compilatore AOT.