¿Por qué es difícil vencer al compilador AOT con un compilador JIT (en términos de rendimiento de la aplicación)?

Estaba pensando que los compiladores JIT eventualmente vencerán a los compiladores AOT en términos del rendimiento del código compilado, debido a la ventaja inherente de JIT (puede usar la información disponible solo en tiempo de ejecución). Un argumento es que los compiladores de AOT pueden pasar más tiempo compilando código, pero una VM de servidor también podría pasar mucho tiempo.

Entiendo que JIT parece vencer a los compiladores de AOT en algunos casos, pero aún parecen retrasarse en la mayoría de los casos.

Así que mi pregunta es, ¿cuáles son los problemas específicos y difíciles que impiden que los compiladores JIT superen a los compiladores AOT?

EDITAR
Algunos argumentos comunes:

os compiladores de @AOT pueden pasar más tiempo haciendo optimizaciones avanzadas -> Si está ejecutando una VM de servidor durante días, puede pasar la misma cantidad de tiempo, si no más.a interpretación del código @Byte ha costado -> La mayoría de los compiladores JIT almacenan en caché las instrucciones de la máquina nativa en estos día

Sin embargo, otra edición:
Para un ejemplo específico, vea este artículo:ejora del rendimiento del swing: compilación JIT vs AOT. De lo que puedo deducir de este artículo, los autores básicamente dicen que cuando no hay zonas activas, la ventaja de tener información de tiempo de ejecución disminuye y, por lo tanto, gana AOT sin la sobrecarga de JIT. ¿Pero en un 40%? Eso no parece tener mucho sentido. ¿Es simplemente que el compilador JIT que se comparó no se ajustó para esta situación? ¿O es algo más fundamental?

Respuestas a la pregunta(1)

Su respuesta a la pregunta