2009-11-05 16 views
12

Actualmente estoy escribiendo un compilador de juguetes que apunta a bytecode de Java en la traducción.Optimización del compilador: bytecode de Java

Me gustaría saber si hay algún tipo de catálogo, quizás un resumen, de varias optimizaciones simples de mirilla que se pueden hacer en el bytecode emitido antes de escribir el archivo .class. De hecho, conozco algunas bibliotecas que tienen esta funcionalidad, pero me gustaría implementarlo yo mismo.

+2

La mayor parte de la optimización no se realiza en el compilador de Java sino en el tiempo de ejecución. ¿Los resultados de rendimiento objetivo o el resultado de rendimiento no están optimizados en el tiempo de ejecución? –

+0

El objetivo real sería el aprendizaje del compilador. Supongo que eso hace que las optimizaciones en tiempo de compilación sean más interesantes para mí, así puedo ver qué está sucediendo e implementarlo yo mismo, en lugar de dejarlo en otro software. –

Respuesta

19

¿Está al tanto de Proguard? http://proguard.sourceforge.net/

Este es un gran optimizador de bytecode que implementa muchas optimizaciones. Consulte las preguntas frecuentes para obtener una lista: http://proguard.sourceforge.net/FAQ.html

  • Evaluar expresiones constantes.
  • Elimina los accesos de campo innecesarios y las llamadas al método .
  • Eliminar ramas innecesarias.
  • Eliminar comparaciones innecesarias y instancia de pruebas.
  • Eliminar el código no utilizado bloques.
  • Fusionar bloques de código idénticos.
  • Reduce la asignación de variables.
  • Eliminar campos de solo escritura y el método no utilizado parámetros.
  • Campos de constante en línea, parámetros de método y valores de retorno.
  • Métodos en línea que son cortos o solo llamados una sola vez.
  • Simplificar la recursión de cola llamadas.
  • Combinar clases e interfaces.
  • Haga métodos privados, estáticos y final cuando sea posible.
  • Realice las clases estáticas y finales siempre que sea posible.
  • Reemplace las interfaces que tienen implementaciones únicas .
  • Realizar más de 200 optimizaciones de mirilla, como la sustitución de ... * 2 por ... < < 1.
  • Opcionalmente código de registro de eliminación.

Estoy seguro de que puede seguir investigando el código fuente para comprender cómo se implementan.

+0

¿Existe una versión .NET quizás? – leppie

+0

Combinar clases e interfaces: ¿cómo sabe el compilador que puede colapsar una jerarquía de tipos? Solo puede estar seguro de las interfaces privadas. –

+0

Gracias, lo investigaré. –

Cuestiones relacionadas