Sto lavorando ad un'applicazione Android ad alte prestazioni (un gioco), e sebbene provi prima a scrivere codice per la leggibilità, mi piace tenere in mente un'immagine di ciò che sta accadendo sotto il cofano. Con C++, ho sviluppato un'intuizione abbastanza buona su ciò che il compilatore farà e non farà per me. Sto cercando di fare lo stesso per Java/Android.Quali ottimizzazioni posso aspettarmi da Dalvik e dalla toolchain di Android?
Quindi questa domanda. Potrei trovare molto poco su questo argomento sul web. Il compilatore Java, il convertitore Dalvik (dx) e/o JITter (su Android 2.2+) eseguiranno ottimizzazioni come le seguenti?
Metodo di inlining. In quali condizioni? I metodi
private
possono essere sempre inseriti in modo sicuro; sarà fatto? Che ne dici dei metodipublic final
? Metodi su oggetti di altre classi? Metodistatic
? Cosa succede se il tipo di esecuzione dell'oggetto può essere facilmente dedotto dal compilatore? Devo dichiarare metodi comefinal
ostatic
ovunque possibile?Eliminazione di sottoespressione comune. Ad esempio, se accedo due volte allo
someObject.someField
, la ricerca verrà effettuata una sola volta? E se fosse una chiamata a un getter? Cosa succede se uso due espressioni aritmetiche due volte; sarà valutato solo una volta? Cosa succede se utilizzo il risultato di una determinata espressione, il cui valore non so cambiare, come limite superiore di un ciclofor
?I limiti controllano le ricerche di array. La toolchain lo eliminerà in determinate condizioni, come il ciclo archetipico
for
?Valore inlining. Gli accessi ad alcuni
public static final int
saranno sempre in linea? Anche se sono in un'altra classe? Anche se sono in un altro pacchetto?Previsione ramo. Quanto è grande un problema anche questo? Si sta ramificando un grande successo di prestazioni su un tipico dispositivo Android?
Semplice aritmetica.
someInt * 2
sarà sostituito dasomeInt << 1
?
Etcetera ...
Questo potrebbe essere utile: http://developer.android.com/guide/practices/design/performance.html – pablochan
Questi potrebbero anche essere utili: http://www.netmite.com/android/mydroid/dalvik/ docs/dexopt.html, http://www.taranfx.com/android-internals-jit-froyo e la versione pdf della presentazione: http://www.android-app-developer.co.uk/android- app-development-docs/android-jit-compiler-androids-dalvik-vm.pdf – Lior
@pablochan: Quella è stata sotto il mio cuscino per qualche tempo, ma grazie :) @Lior: Buoni riferimenti, quelli sono nuovi per me, grazie ! – Thomas