El compilador AOT

La compilación por adelantado (AOT) permite la compilación de clases Java™ en código nativo para posteriores ejecuciones del mismo programa. El compilador AOT funciona junto con la infraestructura de compartimiento de datos de la clase.

El compilador AOT genera dinámicamente código nativo mientras una aplicación ejecuta y copia en caché cualquier código generado por AOT en la memoria caché de datos compartidos. Las máquinas virtuales Java (JVM) posteriores que ejecutan el método pueden cargar y utilizar el código AOT de la memoria caché de compartimiento de datos sin que se produzca una reducción del rendimiento que se registra con el código nativo compilado por JIT.

El compilador AOT está inhabilitado de forma predeterminada, pero sólo está activo cuando se habilitan las clases compartidas. De forma predeterminada, las clases compartidas están inhabilitadas para que no se produzca ninguna actividad AOT. Cuando el compilador AOT está activo, el compilador selecciona los métodos que se compilarán con AOT con el objetivo principal de mejorar el tiempo de arranque.

Nota: Puesto que el código AOT debe persistir en distintas ejecuciones de programa, el código generado por AOT no funciona tan bien como el código generado por JIT. El código AOT normalmente funciona mejor que el código interpretado.

En una máquina virtual Java sin un compilador AOT o con el compilador AOT inhabilitado, el compilador JIT compila de forma selectiva los métodos que se utilizan con frecuencia en un código nativo optimizado. Existe un coste de horas asociado a la compilación de métodos porque el compilador JIT se realiza operaciones mientras se ejecuta la aplicación. Como los métodos empiezan por ser interpretados y la mayoría de las compilaciones JIT se realizan durante el arranque, se pueden aumentar los tiempos de arranque.

El rendimiento del arranque se puede mejorar utilizando los códigos AOT compartidos con el fin de ofrecer código nativo sin compilación. Hay un pequeño coste de tiempo para cargar el código AOT correspondiente a un método desde la memoria caché de datos compartidos y enlazarlo a un programa en ejecución. El coste de tiempo es bajo en comparación con el tiempo que tarda el compilador JIT en compilar dicho método.

La opción -Xshareclasses se puede utilizar para habilitar las clases compartidas, que también pueden activar el compilador AOT si AOT está habilitado.