verificar una pruebe powered para net maquina encontro descargar cargar java jvm jit cil

java - una - Optimización de máquinas virtuales



pruebe java (7)

Estoy jugando con un intérprete de juguetes en Java y estaba considerando intentar escribir un compilador simple que pueda generar bytecode para la Máquina Virtual de Java. Lo que me hizo pensar, ¿cuánta optimización deben hacer los compiladores que se dirigen a máquinas virtuales como JVM y CLI?

Los compiladores de Just In Time (JIT) realizan optimizaciones constantes de plegado, mirilla, etc.


La optimización de bytecode es probablemente un oxímoron en la mayoría de los casos

No creo que eso sea cierto. Las optimizaciones como las invariantes de ciclo de elevación y las constantes de propagación nunca pueden perjudicar, incluso si la JVM es lo suficientemente inteligente como para hacerlas por sí misma, por la simple virtud de hacer que el código funcione menos.


La optimización es lo que hace que las JVM sean viables como entornos para aplicaciones de larga ejecución, puede apostar que SUN, IBM y sus amigos hacen todo lo posible para garantizar que puedan optimizar su código de bytes y código compilado JIT de la manera más eficiente posible.

Habiendo dicho eso, si crees que puedes preoptizar tu bytecode, probablemente no haga mucho daño.

Sin embargo, vale la pena tener en cuenta que las JVM pueden tender a desempeñarse mejor (y no bloquearse) cuando se presentan con el tipo de bytecode que el compilador de Java tiende a construir. No es desconocido que las optimizaciones se pierdan o incluso que la JVM se bloquee cuando se produzcan permutaciones de bytecode correctas, pero a diferencia de lo que produciría javac. Afortunadamente, ese tipo de cosas ahora está más en el pasado, pero puede ser algo a tener en cuenta.


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



La optimización de bytecode es probablemente un oxímoron en la mayoría de los casos. A menos que controle la máquina virtual, no tiene idea de lo que hace para acelerar la ejecución del código, en todo caso. El compilador necesitaría conocer los detalles de la VM para generar código optimizado.


Los ofuscadores como ProGuard realizarán muchas optimizaciones estáticas en su bytecode.


Nota para Aseraphim:

También puede ser útil optimizar bytecode para aplicaciones no integradas en algunos casos limitados:

  1. Al entregar el código a través del cable, por ejemplo, para aplicaciones WebStart, para minimizar el tamaño de entrega / caché y porque no necesariamente conoce la capacidad / velocidad del cliente.

  2. Para el código que usted sabe que es crítico para el rendimiento y se usa al inicio, (por ejemplo) HotSpot ha tenido tiempo de recopilar estadísticas.

De nuevo, las transformaciones que realiza un buen optimizador / ofuscador pueden ser muy útiles.