2016-11-03 34 views
11

Wiem, że istnieją 2-3 tematy na ten temat, były problemy z FinalizerReference, ale nadal nie jest to dobrze wyjaśnione. Mam pytanie dotyczące tej klasy i jak działają w niej rzeczy.Android FinalizerReference za pomocą 7 MB pamięci RAM

Bez względu na to, co robię w moim app, FinalizerReference zawsze 5-10 RAM dla siebie, i moje pytanie brzmi:

jest to normalne zachowanie, że nie mam się martwić?

Z tego co wiem, obiekty Java są zwalniane, ale "wskaźniki" pozostają w pamięci i są czyszczone przy następnym GC (tak samo jak normalne obiekty oczyszczane za pomocą GC, bez odniesienia do niego).

Dla mnie jest to trochę źle, ponieważ jeśli mam ~ 64 MB pamięci RAM do użycia z moją aplikacją i 10mb są zmarnowane - musi to być problem.

Sprawdziłem to wszystko, usunąłem wszystkie przecieki, które miałem i obecnie moja aplikacja po prostu pozostaje w 18 ~ MB pamięci RAM (7 RAM - grafika, 2 RAM - Obiekty). Reszta - FinalizerReference;/

Oto zrzut ekranu z AppHeap: enter image description here

oto ekran z jego wystąpień:

enter image description here

i tu jest mój monitor pamięci (pozostaje w tej formie przez 30 minut):

enter image description here

Ponadto w panelu "Wystąpienia" znajduje się 50 wpisów, w tym ~ 5 z mojego kodu i bibliotek, z których korzystam. Reszta jest z Androidem - InputManagers, paczki, proxy itp

Edit

Dzieje się tak na Galaxy S5. Na Android Emulator mam ~ 2MB z FinalizerReference

Odpowiedz

1

nie rozwiąże problemu, ale dostaliśmy informację, że powinienem sprawdzić na pusty projekt.

wypróbowane:

  • Android Studio systemu Windows x32
  • Android Studio x64 systemu Windows
  • IntelliJ IDEA x32
  • IntelliJ IDEA x64

Wszystkie te powodują FinalizerReference zachować 5-10 mb od RAM dla siebie, na pustym i niepustym proj ect.

Po prostu zignoruj ​​problem i kontynuuj pisanie kodu.

1

miałem ten sam problem z FinalizerReference tylko na Nexusie 5.

Oto zrzut ekranu zrzut stosu z Androidem Studio. enter image description here

Po przeprowadzeniu badań, znalazłem komentarz this, w którym stwierdzono, że może to być spowodowane przez System.

Użyłem także narzędzia do analizy pamięci Eclipse (MAT), które dowiodło, że tylu obiektów FinalizerReference należy do Systemu.

I nie zajmowało to tak dużo pamięci, jak pokazywał zrzut sterty Android Studio.

enter image description here

+0

Mam na myśli system, ponieważ obok niego napisana jest klasa systemowa i o ile mi wiadomo, oznacza to, że system Android załadował tę klasę – hakobyanheghine