Pregunta

Estoy jugando con un juguete intérprete de Java y yo estaba pensando en tratar de escribir un simple compilador que genere código de bytes de la Máquina Virtual de Java.Que me puso a pensar, ¿cuánto de optimización debe ser realizado por los compiladores que se dirigen a las máquinas virtuales, tales como la JVM y el CLI?

Hacer Justo a Tiempo (JIT) compiladores hacer constante plegable, mirilla optimizaciones, etc?

¿Fue útil?

Solución

Solo voy a añadir dos enlaces que explican Java bytecode de la bastante bien y algunos de los optimización de varios de la JVM en tiempo de ejecución.

Otros consejos

Optimización de código de bytes es, probablemente, una contradicción en la mayoría de los casos

No creo que sea cierto.Optimizaciones como ondear invariantes de bucle y de propagación de constantes puede nunca daño, incluso si la JVM es lo suficientemente inteligente como para hacerlo por su propia cuenta, por la simple virtud de lo que el código es menos trabajo.

La optimización es lo que hace Jvm viable como entornos de larga ejecución de aplicaciones, usted puede apostar que el SUN, IBM y amigos están haciendo su mejor esfuerzo para asegurarse de que puede optimizar su bytecode y JIT-código compilado en un eficiente como sea posible.

Con eso se dice, si usted piensa que usted puede pre-optimizar tu código de bytes, entonces probablemente no va a hacer mucho daño.

Conviene saber, sin embargo, que la Jvm puede tender hacia un mejor desempeño (y no se bloquea) cuando se presenta con el tipo de código de bytes de Java compilador tiende a construir.No es desconocido que las optimizaciones se puede perder o incluso para la JVM de choque cuando permutaciones de bytecode ocurrir que es correcta, pero a diferencia de lo que sería producido por javac.Esperemos que ese tipo de cosas es más en el pasado que ahora, pero puede ser algo a tener en cuenta.

Obfuscators como ProGuard realizará estática optimizaciones en el código de bytes para usted.

El HotSpot compilador optimiza el código en tiempo de ejecución mejor que es posible en tiempo de compilación - tiene más información para trabajar con el, después de todo.La única vez que usted debe optimizar el código de bytes en lugar de sólo su algoritmo es cuando son dirigidos a dispositivos móviles, como Blackberry, donde la JVM para que la plataforma no es lo suficientemente potente para optimizar el código en tiempo de ejecución y sólo se ejecuta el código de bytes.

Optimización de código de bytes es, probablemente, una contradicción en la mayoría de los casos.A menos que el control de la máquina virtual, usted no tiene idea de lo que hace para acelerar la ejecución de código, si cualquier cosa.El compilador necesita saber los detalles de la máquina virtual con el fin de generar código optimizado.

Nota para Aseraphim:

También puede ser útil para optimizar el código de bytes para que no las aplicaciones integradas en algunos casos limitados:

  1. Cuando la entrega de código a través de la red, por ejemplo, para WebStart de las aplicaciones, para minimizar los entregables/tamaño de la caché y porque no se conoce la capacidad/velocidad de la cliente.

  2. Para el código que usted sabe que es rendimiento crítico y se utiliza en el arranque antes de que (dicen) HotSpot ha tenido tiempo para reunir estadísticas.

De nuevo, las transformaciones que un buen optimizador/obfuscator realiza puede ser muy útil.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top