2012-11-28 22 views
8

Dato il seguente codice:Perché javac non ottimizza nemmeno un codice semplice?

public class MainClass { 
    public static int f(){ 
     int i=0; 
     i++; 
     return i; 
    } 
} 

il javac compilatore genera il seguente codice:

Compiled from "MainClass.java" 
public class latte_jvm.MainClass { 

    public static int f(); 
    Code: 
     0: iconst_0 
     1: istore_0 
     2: iinc   0, 1 
     5: iload_0 
     6: ireturn 
} 

Funzione f fa cosa molto semplice - semplicemente restituisce 1. E 'così direttamente tradotto che mi rende difficile credere che il compilatore java faccia delle ottimizzazioni. Perché i creatori di compilatori Java hanno deciso di non eseguire tali ottimizzazioni nella fase di compilazione?

+4

Il compilatore non è l'unico ottimizzatore. Il compilatore JIT può ottimizzarlo in seguito. – reprogrammer

+2

Penso che la maggior parte delle ottimizzazioni vengano eseguite in fase di esecuzione dal JIT. – Mysticial

risposta

17

È così tradotto direttamente che mi rende difficile credere che il compilatore Java esegua alcuna ottimizzazione.

Infatti. La maggior parte dell'ottimizzazione Java viene eseguita al momento del JIT. I manutentori Java hanno scoperto molto tempo fa che, in molti casi, le ottimizzazioni eseguite allo in fase di compilazione in realtà ostacolavano le ottimizzazioni più importanti in JIT-time.

Per alcuni anni l'argomento della riga di comando -O non ha fatto nulla, e in modo molto deliberato.

+0

Ma ancora, non potrebbe semplicemente fare 'iconst_1; ireturn'? – Marcin

+2

@Marcin Potrebbe, ma ciò richiederebbe uno sforzo, e il JIT lo fa già. – delnan

+2

+1 IMHO, le poche ottimizzazioni del 'javac' possono essere tanto una maledizione quanto una benedizione. per esempio. in linea con le costanti di tempo della compilazione. –

6

Inoltre, spostando l'ottimizzazione su JVM, tutte le lingue basate su JVM possono trarne vantaggio. I compilatori (non solo javac) hanno un lavoro relativamente più semplice; gli inventori della lingua non devono essere esperti di ottimizzazione.

Problemi correlati