Optimisation du compilateur: bytecode Java


J'écris actuellement un compilateur jouet ciblant le bytecode Java dans la traduction.

Je voudrais savoir s'il existe une sorte de catalogue, peut-être un résumé, de diverses optimisations de judas simples qui peuvent être effectuées dans le bytecode émis avant d'écrire le .fichier de classe. Je suis en fait conscient de certaines bibliothèques qui ont cette fonctionnalité, mais j'aimerais l'implémenter moi-même.

Author: Giuliano Vilela, 2009-11-05

1 answers

Vous connaissez Proguard? http://proguard.sourceforge.net/

C'est un excellent optimiseur de bytecode qui implémente beaucoup d'optimisations. Voir la FAQ pour une liste: http://proguard.sourceforge.net/FAQ.html

  • Évaluer les expressions constantes.
  • Supprimer les accès inutiles aux champs et la méthode appeler.
  • Supprimer les branches inutiles.
  • Supprimer les comparaisons inutiles et instanceof tests.
  • Supprimer le code inutilisé bloc.
  • Fusionner des blocs de code identiques.
  • Réduire variable de répartition.
  • Supprimer champs en écriture seule et méthode inutilisée paramètre.
  • Champs constants en ligne, paramètres de méthode et valeurs de retour.
  • Méthodes en ligne qui sont courtes ou seulement appelé une seule fois.
  • Simplifier la récursivité de la queue appeler.
  • Fusionner les classes et les interfaces.
  • Rendre les méthodes privées, statiques et final lorsque cela est possible.
  • Faire des classes statique et finale quand possible.
  • Remplacer les interfaces qui ont application.
  • Effectuer plus de 200 optimisations judas, comme remplacer ...*2 par ...
  • Optionnellement supprimer le code de journalisation.

Je suis sûr que vous pouvez approfondir le code source pour comprendre comment ils sont implémentés.

 23
Author: Sean Owen, 2009-11-05 12:21:53