2009-11-05 14 views
12

Attualmente sto scrivendo un compilatore giocattolo che indirizza il bytecode Java nella traduzione.Ottimizzazione del compilatore: bytecode Java

Vorrei sapere se esiste una sorta di catalogo, magari un riepilogo, di varie semplici ottimizzazioni dello spioncino che possono essere apportate nel bytecode emesso prima di scrivere il file .class. In realtà sono a conoscenza di alcune librerie con questa funzionalità, ma mi piacerebbe implementarle anch'io.

+2

La maggior parte dell'ottimizzazione non viene eseguita nel compilatore Java ma nel runtime. I risultati delle prestazioni di destinazione o il risultato delle prestazioni sono ottimizzati senza le ottimizzazioni del runtime? –

+0

Il vero obiettivo sarebbe l'apprendimento del compilatore. Immagino che ciò renda le ottimizzazioni in fase di compilazione più interessanti per me, così posso vedere cosa sta succedendo e implementarlo da solo, piuttosto che lasciarlo a un altro software. –

risposta

19

Sei a conoscenza di Proguard? http://proguard.sourceforge.net/

Questo è un ottimo ottimizzatore bytecode che implementa molte ottimizzazioni. Vedere le domande frequenti per un elenco: http://proguard.sourceforge.net/FAQ.html

  • Valutazione di espressioni costanti.
  • Rimuovere accessi di campo non necessari e chiamate di metodo .
  • Rimuovere rami inutili.
  • Rimuovere i confronti non necessari e l'istanza di prova .
  • Rimuovere i codici non utilizzati blocchi.
  • Unisci blocchi di codice identici.
  • Ridurre l'allocazione variabile.
  • Rimuovi campi di sola scrittura e metodi inutilizzati parametri.
  • Campi costanti incorporati, parametri del metodo e valori restituiti.
  • Metodi in linea che sono brevi o solo chiamati una volta.
  • Semplifica le chiamate di ricorsione della coda.
  • Unisci classi e interfacce.
  • Rendi i metodi privati, statici e finale quando possibile.
  • Rendi statiche statiche e definitive quando possibile.
  • Sostituire le interfacce con le singole implementazioni .
  • Eseguire oltre 200 ottimizzazioni spioncino, come sostituzione ... * 2 da ... < < 1.
  • Opzionalmente codice di registrazione di rimozione.

Sono sicuro che è possibile esaminare ulteriormente il codice sorgente per capire come sono implementati.

+0

C'è forse una versione .NET? – leppie

+0

Unisci classi e interfacce: come fa il compilatore a sapere che può comprimere una gerarchia di tipi? Può solo essere sicuro delle interfacce private. –

+0

Grazie, lo esaminerò. –

Problemi correlati