Ich habe Schwierigkeiten, ein mögliches Speicherleck zu finden. Ich habe eine Aktivität, die im Hintergrund einige schwere Arbeit leistet.Wie initiiert das Android Studio den Garbage Collector und wie funktioniert es?
Nach einigen Aufgaben verbraucht die App zu viel Speicher. Es scheint, dass es nicht richtig aufgeräumt wird.
Dies ist die Aktivität in den Auslieferungszustand:
Wenn ich die Aufgabe ausführen, die die Aktivität tut, mehr und mehr Speicher zugeordnet ist.
Aktivität nach einiger Arbeit:
Zuerst dachte ich, das ein Speicherproblem sein muss, bewirken, dass der GC nicht richtig den Speicher freizugeben. Soweit ich weiß, kann der GC den Speicher freigeben, wenn keine Referenz mehr zu den Objekten vorhanden ist. Ist das korrekt?
Jetzt kommt der Teil, der mich verwirrt:
Wenn ich die GC von Android Studio ausführen, wird der Speicher richtig und meine Tätigkeit geschlossen wird nie gereinigt. Ich muss nur den Android Studio GC verwenden, wenn zu viel Speicher zugewiesen ist.
Das ist das, was ich meine:
allgemein In der Frage ist:
Warum richtig den Speicher der Android Studio GC aufzuräumen und warum nicht der Fall ist funktioniert es richtig mit dem automatischen android GC?
Ich weiß, das ist eine ziemlich allgemeine Frage. Ich möchte nur wissen, ob es verschiedene Arten von Garbage Collections oder ähnliches gibt.
Auch der Aufruf System.gc();
bereinigt den Speicher nicht ordnungsgemäß.
Zusätzliche Information:
Moto G 2nd gen
Android 5.0.2.
"Manchmal schließt die Aktivität oder die App. Ich dachte, es könnte durch Speicherprobleme verursacht werden." Wenn die App b/c stirbt, wird nicht genügend Speicher zur Verfügung gestellt. Sie erhalten eine Out-of-Memory-Ausnahme, die Sie in Logcat deutlich sehen können. Meine Vermutung ist, dass Ihre App aus einem anderen Grund abstürzt. Versuchen Sie, Logcat zu sehen, um zu sehen, was der Absturzgrund ist. – Shmuel
Der gleichzeitige GC führt nur eine Teilerfassung durch, um keine merklichen Pausen zu verursachen. Expliziter GC, wie der von Studio ausgelöste, macht einen vollständigen GC-Sweep. Einige lesen: https://source.android.com/devices/tech/dalvik/gc-debug.html – laalto
@Shmuel Es gibt keine Ausnahmen. Nicht einmal Warnungen. – FlanschiFox