Je suis d'optimisation des performances des jeux interactifs en Java pour la plateforme Android. De temps en temps il y a un problème dans le dessin et l'interaction pour la collecte des ordures. Habituellement, c'est moins d'un dixième de seconde, mais parfois il peut être aussi grand que 200ms sur très lent appareils.
Je suis l'aide de la ddms profiler (partie du SDK Android) à la recherche où mes allocations de mémoire à venir, et de l'accise de mon intérieur du dessin et de la logique des boucles.
Le pire délinquant avait été de courte boucle de fait,
for(GameObject gob : interactiveObjects)
gob.onDraw(canvas);
où chaque fois que la boucle a été exécuté il y a un iterator
alloués. Je suis à l'aide de tableaux (ArrayList
) pour mes objets maintenant. Si jamais je veux des arbres ou des hachages dans une boucle interne, je sais que j'ai besoin d'être plus prudent ou même les réimplémenter au lieu d'utiliser le Java Collections cadre, car je ne peux pas se permettre de payer le supplément de la collecte des ordures. Qui peut venir quand je suis à la recherche des files d'attente de priorité.
J'ai aussi des problèmes lorsque je veux afficher les scores et les progrès à l'aide de Canvas.drawText
. Ce qui est mauvais,
canvas.drawText("Your score is: " + Score.points, x, y, paint);
parce qu' Strings
, char
tableaux et StringBuffers
seront alloués pour le faire fonctionner. Si vous avez un peu de texte pour l'affichage des éléments et exécuter le cadre 60 fois par seconde, qui commence à ajouter et permettra d'augmenter votre collecte des ordures hoquet. Je pense que le meilleur choix est de garder char[]
tableaux et décoder vos int
ou double
manuellement et concaténer des chaînes sur le début et la fin. Je voudrais savoir si il y a quelque chose de plus propre.
Je sais il doit y avoir d'autres là-bas en occuper. Comment gérez-vous et quels sont les écueils et les meilleures pratiques que vous avez découvert à exécuter de manière interactive sur Java ou Android? Ces gc questions sont assez pour me faire manquer manuel de gestion de la mémoire, mais pas beaucoup.