Ich habe eine mobile Anwendung, die im Laufe der Zeit Verlangsamung leidet. Meine Ahnung, (teilweise von this article gespeist,) ist, dass dies aufgrund der Fragmentierung des Speichers die App verlangsamt, aber ich bin mir nicht sicher. Hier ist eine ziemlich grafische Darstellung der Speichernutzung der App im Laufe der Zeit:Wie sieht fragmentiertes Gedächtnis aus?
fraggle rock http://kupio.com/image-dump/fragmented.png
Die vier Spitzen auf dem Diagramm sind vier Ausführungen der exakt gleichen Aufgabe auf der App. Ich beginne die Aufgabe, es teilt eine Menge Speicher zu, es sitzt für ein bisschen (die flache Linie an der Spitze) und dann höre ich die Aufgabe auf. An diesem Punkt ruft er System.gc() auf; und die Erinnerung wird aufgeräumt.
Wie zu sehen ist, dauert jeder der 4 Läufe der exakt gleichen Aufgabe länger. Die Tiefpunkte im Diagramm kehren alle auf das gleiche Niveau zurück, so dass zwischen den Task-Läufen keine Speicherlecks zu bestehen scheinen.
Was ich wissen will ist, ist Speicher Fragmentierung eine machbare Erklärung oder sollte ich zuerst woanders schauen, bedenkt, dass ich schon viel gesucht habe? Die Tiefpunkte im Graphen sind relativ niedrig, daher nehme ich an, dass der Speicher in diesem Zustand nicht sehr fragmentiert ist, da es nicht viele kleine Speicherlöcher geben kann, die Probleme verursachen.
Ich weiß nicht, wie der j2me Speicherzuordner funktioniert, also weiß ich wirklich nicht. Kann jemand beraten? Hat jemand anderes Probleme damit und erkennt das Speicherprofil der App?
Die normale Java-VM komprimiert ihren Heap als Teil ihrer Garbage-Collection-Aufgaben (Entfernen von Fragmentierung) - nicht sicher über J2ME obwohl ... – bdonlan