Je suis en train de travailler sur une haute performance de l'application Android (un jeu), et bien que j'essaie de code pour plus de lisibilité d'abord, je tiens à garder dans le dos de mon esprit une image de ce qui se passe sous le capot. Avec le C++, j'ai développé une assez bonne intuition sur ce que le compilateur fait et ne pas faire pour moi. Je suis en train de faire la même chose pour Java/Android.
D'où cette question. J'ai pu trouver que très peu sur ce sujet sur le web. Sera le compilateur Java, Dalvik convertisseur (dx) et/ou de la Gigue (Android 2.2+) procéder à des optimisations comme la suivante?
Méthode inline. Sous quelles conditions?
private
méthodes peuvent toujours en toute sécurité être inline; cela sera fait? Que diriez -public final
méthodes? Méthodes sur les objets des autres classes?static
méthodes? Que faire si le moteur d'exécution type de l'objet peut être facilement déduite par le compilateur? Dois-je déclarer les méthodes qu'final
oustatic
dans la mesure du possible?Commune de la sous-expression de l'élimination. Par exemple, si j'ai accès
someObject.someField
deux fois, la recherche sera effectuée qu'une seule fois? Si c'est un appel à un getter? Que faire si j'utilise une expression arithmétique deux fois; il va être évaluées qu'une seule fois? Que faire si j'utilise le résultat d'une expression, dont la valeur que je connais pour ne pas changer, comme la limite supérieure d'unfor
boucle?La vérification des limites sur la matrice de recherches. Sera le de la chaîne d'éliminer ce, dans certaines conditions, comme l'archétype
for
boucle?La valeur inline. Auront accès à quelques -
public static final int
toujours être incorporé? Même s'ils sont dans une autre classe? Même s'ils sont dans un autre paquet?Direction de la prévision. Comment un gros problème, est-ce la même? Est une ramification de grandes performances sur un appareil Android?
Un Simple calcul arithmétique. Va
someInt * 2
être remplacé parsomeInt << 1
?
Etc...