Il compilatore Java standard esegue alcune ottimizzazioni, ma lascia la maggior parte di esse al JIT.
Il JIT sa su quale processore esattamente il programma è in esecuzione e ha anche accesso alle informazioni di runtime, e quindi può fare più ottimizzazioni di quelle che il compilatore Java potrebbe fare in anticipo. Inoltre, fare in anticipo ampie ottimizzazioni potrebbe "offuscare" un po 'il codice byte, rendendo più difficile per il JIT ottimizzarlo.
Non so cosa fa il compilatore di Google quando traduce il codice byte Java nel codice Dalvik - potrebbe essere una ottimizzazione più ampia.
Forse questo strumento sarà utile per voi: Dalvik Optimization and Verification With dexopt
A proposito, l'esempio si parla non è sempre valida; la trasformazione di a/4
in a >> 2
non garantisce il funzionamento del programma più veloce su qualsiasi processore. Ho letto un articolo da qualche parte una volta (scusa, non riesco a trovarlo in questo momento ...) che ha spiegato che su (penso) i moderni processori x86, a >> 2
potrebbe anche essere più lento di a/4
.
In ogni caso, non fare ottimizzazioni premature come trasformare a/4
in a >> 2
a mano nel codice sorgente a meno che non si abbiano prove reali (da misurazioni di prestazioni) che valga la pena farlo.
La divisione rispetto allo spostamento a sinistra non ha alcun effetto sulla velocità complessiva del programma. Non il minimo bit. – delnan