lo que está diciendo es que no es práctico para compilar todo el código de bytes de lenguaje de máquina en tiempo de ejecución. Podrías precompilar todo, pero ese no es el enfoque que toma JIT.
Por un lado, no se sabe qué tan grande es el programa. La gente se molestaría bastante con un inicio de 30 minutos, ya que compiló todas las bibliotecas que pudo encontrar (un programa Java dado no está en un solo archivo, tiene acceso a todo en el classpath)
Por otro, incluso si le dijo al sistema exactamente qué componentes usaría su programa, no se sabe cuánto de su programa podría usarse para una corrida determinada: la gente se molestaría más con un arranque de 30 minutos para ejecutar un programa de línea de comando con parámetros que consisten en " --ayuda "
Finalmente puede hacer grandes trucos mediante la compilación mientras se está ejecutando. con un método como este:
public testMeh(int param) {
if(param == 35)
do bunches of crap;
else if (param > 5)
do much more crap;
else
return;
}
El compilador puede llamar una o dos veces y sobre la marcha reconocer que valores de 5 y bajo simplemente volver. Si esto se llama todo el tiempo con un valor de 2, puede reemplazar la llamada al método ENTER con if (param! = 2) testMeh (param);
que elimina toda la llamada de método para ese número. Más tarde se da cuenta de que no llamar a ese método significa que ciertas variables miembro no pueden cambiar y que puede colapsar otras partes del código a nada.
Esto es simplemente duro como el infierno si precompila cosas. Quiero decir que puedes escribir código de excepción en todas partes a medida que reconoces los patrones, pero tu código se convertirá rápidamente en una pesadilla.
Ahora, si está preguntando por qué no precompila todo el programa cuando lo compila en bytecode, esa es una pregunta diferente y no a qué se refería la cita, pero puede hacerlo. Ha sido hecho y funciona bastante bien. Cambia la portabilidad y la flexibilidad de tiempo de ejecución para un tiempo de inicio más rápido.
No estoy del todo seguro de si esto se trata de '* .java -> * .class' o acerca de la compilación de JIT, ¿alguien aclararía? – delnan
Esto es sobre la compilación de JIT. – Sergey