Dì che hai un sacco di loop annidati.
public void testMethod() {
for(int i = 0; i<1203; i++){
//some computation
for(int k=2; k<123; k++){
//some computation
for(int j=2; j<12312; j++){
//some computation
for(int l=2; l<123123; l++){
//some computation
for(int p=2; p<12312; p++){
//some computation
}
}
}
}
}
}
Quando il codice sopra raggiunge lo stadio in cui il compilatore cercherà di ottimizzarlo (credo che sia quando il linguaggio intermedio deve essere convertito in codice macchina?), cosa cercherà di fare il compilatore? C'è qualche ottimizzazione significativa che avverrà?
Comprendo che l'ottimizzatore interromperà i loop mediante fissione del ciclo . Ma questo è solo per ciclo, no? Quello che intendo con la mia domanda è che prenderà qualsiasi azione esclusivamente basata sul vedere i loop annidati? O semplicemente ottimizzerà i loop uno per uno?
Se la VM Java complica la spiegazione, supponiamo che si tratti di codice C o C ++.