O Compilador AOT

A compilação AOT (AOT) permite a compilação de classes Java™ em código nativo para execuções subsequentes do mesmo programa. O compilador AOT funciona com a estrutura de compartilhamento de dados de classes.

O compilador AOT gera código nativo dinamicamente enquanto um aplicativo executa e armazena em cache qualquer código AOT gerado no cache de dados compartilhados. JVMs subsequentes que executam o método podem carregar e usar o código AOT do cache de dados compartilhados sem incorrer na queda de desempenho que geralmente ocorre com código nativo compilado por JIT.

O compilador AOT é ativado por padrão, mas fica ativo somente quando as classes compartilhadas estão ativadas. Por padrão, as classes compartilhadas ficam desativadas para que não ocorra atividade AOT. Quando o compilador AOT está ativo, o compilador seleciona os métodos para o AOT compilado com o objetivo principal de melhorar o tempo de inicialização.

Nota: Como o código AOT deve persistir em diferentes execuções de programas, o código gerado por AOT não é executado tão bem quanto o código gerado por JIT... O código AOT geralmente é executado melhor do que o código interpretado.

Em uma JVM sem um compilador AOT ou com o compilador AOT desativado, o compilador JIT compila de forma seletiva os métodos usados frequentemente no código nativo otimizado. Há um custo de tempo associado aos métodos de compilação, pois o compilador JIT opera enquanto o aplicativo está em execução. Como os métodos começam sendo interpretados e a maioria das compilações JIT ocorre durante a inicialização, os tempos de inicialização podem aumentar.

O desempenho de inicialização pode ser melhorado usando-se o código AOT compartilhado para fornecer código nativo sem compilação. Há um pequeno custo de tempo para carregar o código AOT de um método do cache de dados compartilhados e ligá-lo a um programa em execução. O custo de tempo é baixo em comparação com o tempo gasto para o compilador JIT compilar esse método.

A opção -Xshareclasses pode ser usada para ativar classes compartilhadas, o que também pode ativar o compilador AOT se AOT estiver ativado.