(En primer lugar, debo dejar en claro que los compiladores y las máquinas virtuales ( aka ) son un campo completamente desconocido para mí)
Según tengo entendido, cada vez que se ejecuta una aplicación Java / C # / ..., se invoca una VM y traduce el código intermedio (bytecode, CIL, etc.) a las instrucciones de la máquina.
Pero, ¿por qué esta operación no puede hacerse solo una vez, en el momento de la instalación?
Respuestas:
En el caso de Java, la JVM puede hacer optimizaciones que cruzan los límites de la biblioteca. Por ejemplo, podría incluir un método de una biblioteca en su propio código de cliente. Este tipo de optimización no se pudo realizar en tiempo de compilación, porque la biblioteca puede cambiar antes de la ejecución. Es completamente posible que su libfoo-1.0 sea reemplazado por libfoo-1.1 sin una nueva compilación. Si eso sucede, las inline de bibliotecas cruzadas realizadas en tiempo de compilación serían totalmente inválidas.
Al hacer la optimización únicamente en tiempo de ejecución, no hay que preocuparse de que la biblioteca que cambie debajo de usted invalide las optimizaciones.
fuente
Porque esto les impide usar muchas funciones. Por ejemplo, ¿cómo puede el JIT generar nuevas instancias genéricas de las DLL cargadas en tiempo de ejecución? Esas DLL no existen en el momento de la instalación.
fuente
Puede, y a menudo lo es, al menos con aplicaciones .NET. Ver generador de imágenes nativas
fuente
Para reformular la pregunta de acuerdo con la aclaración:
Veo los siguientes problemas:
¿Dónde se almacenarían los resultados? No puede suponer que el archivo que contiene el bytecode se puede escribir; no desea inflar la máquina de un desarrollador volcando un nuevo .exe al almacenamiento permanente cada vez que ejecuta una prueba; y si almacena el archivo en un almacenamiento temporal, se perderá la próxima vez que reinicie, por lo que no ha ganado mucho.
Estás intercambiando un inicio un poco lento cada vez por un inicio muy lento la primera vez. No va a dejar una gran impresión con el cliente.
Tendrás problemas importantes con la carga dinámica de clases.
fuente