Mam trudności ze znalezieniem możliwego wycieku pamięci. Mam aktywność, która wykonuje ciężką pracę w tle.W jaki sposób Android Studio uruchamia Garbage Collector i jak to działa?
Po wykonaniu niektórych zadań aplikacja zużywa zbyt dużo pamięci. Wygląda na to, że nie jest prawidłowo czyszczony.
To jest aktywny w stanie domyślnym:
Gdybym uruchomić zadanie, które robi aktywny, coraz więcej pamięci jest przydzielona.
Na początku myślałem, że to musi być problem pamięci, powodują GC nie może prawidłowo zwolnić pamięć. O ile mi wiadomo, GC może zwolnić pamięć, jeśli nie ma odniesienia do Przedmiotów. Czy to jest poprawne?
Teraz jest część, która mnie dezorientuje:
Jeśli biegnę GC z Android Studio, pamięć jest czyszczona prawidłowo i nigdy moja aktywność zostaje zamknięty. Po prostu trzeba użyć GC z Androidem, kiedy przydzielono dużo pamięci.
Jest to jeden Znaczy:
Ogólnie pytanie brzmi:
Dlaczego Android Studio GC oczyścić pamięć i dlaczego właściwie nie robi działa poprawnie z automatycznym GC z Androidem?
Wiem, że to dość ogólne pytanie. Chcę tylko wiedzieć, czy istnieją różne rodzaje śmieci czy coś takiego.
Również wywołanie System.gc();
nie powoduje właściwego wyczyszczenia pamięci.
Informacje dodatkowe:
Moto G 2-ty gen
Android 5.0.2.
"Czasami działanie lub aplikacja zamyka się. Myślałem, że może to być spowodowane problemami z pamięcią." Jeśli aplikacja zginie b/c, gdy zabraknie jej pamięci, otrzymasz wyjątek Out-of Memory, który możesz wyraźnie zobaczyć w Logcat. Mam przeczucie, że twoja aplikacja ulega awarii z innego powodu. Spróbuj przejrzeć logcat, aby zobaczyć przyczynę awarii. – Shmuel
Równoczesne GC dokonuje tylko częściowego odbioru, aby nie powodować zauważalnych przerw. Jawne GC, takie jak wywołane przez Studio, wykonuje pełny zakres GC. Niektóre czytania: https://source.android.com/devices/tech/dalvik/gc-debug.html – laalto
@Shmuel Nie ma wyjątków. Nawet ostrzeżenia. – FlanschiFox