J'ai une application mobile qui souffre de ralentissement au fil du temps. Mon intuition, (En partie alimenté par this article,) est que cela est dû à la fragmentation de la mémoire ralentir l'application vers le bas, mais je ne suis pas sûr. Voilà un joli graphique de l'utilisation de la mémoire de l'application au fil du temps:À quoi ressemble la mémoire fragmentée?
fraggle rock http://kupio.com/image-dump/fragmented.png
Les 4 pics sur le graphique 4 sont des exécutions de la même tâche exacte sur l'application. Je commence la tâche, il alloue un tas de mémoire, il reste un peu (la ligne plate en haut) et ensuite j'arrête la tâche. À ce stade, il appelle System.gc(); et la mémoire est nettoyée.
Comme on peut le voir, chacune des 4 exécutions de la même tâche prend plus de temps à s'exécuter. Les points bas dans le graphique reviennent tous au même niveau, donc il ne semble pas y avoir de fuites de mémoire entre les exécutions de tâches. Ce que je veux savoir, c'est que la fragmentation de la mémoire est une explication possible ou devrais-je regarder ailleurs d'abord, en gardant à l'esprit que j'ai déjà fait beaucoup de recherche? Les points bas sur le graphique sont relativement bas donc mon hypothèse est que dans cet état la mémoire ne serait pas très fragmentée car il ne peut y avoir beaucoup de petits trous de mémoire pour causer des problèmes.
Je ne sais pas comment fonctionne l'allocateur de mémoire j2me, donc je ne sais vraiment pas. Quelqu'un peut-il conseiller? Est-ce que quelqu'un d'autre a eu des problèmes avec cela et reconnaît le profil de la mémoire de l'application?
La VM Java normale compacte son tas dans le cadre de ses tâches de récupération de place (en supprimant toute fragmentation) - pas sûr de J2ME si ... – bdonlan