Uczę się wykorzystania pamięci za pomocą MAT w Eclipse. Chociaż natknąłem się na dziwny problem. Odłóż na bok ciężkie aplikacje, zacząłem od najbardziej łagodnej aplikacji "Hello World". Otrzymuję to jako statystyki sterty na Nexus 5, ART runtime, Lollipop 5.0.1.Nieoczekiwane sterty na Hello World Android APP
ID: 1
Heap Size: 25.429 MB
Przydzielone: 15,257 MB
bezpłatny: 10,172 MB
% Używane: 60%
# Przedmioty : 43487
Moja Heap wysypisko daje mi 3 Pamięć podejrzanych wyciek: Przegląd
„Nie można pisać wykres kołowy z powodu niskiej reputacji.”
problem podejrzanego 1
klasy "android.content.res.Resources", załadowanych przez "", mieści 10,166,936 (38,00%) bajtów. Pamięć jest zgromadzona w jednym egzemplarzu "android.util.LongSparseArray []" załadowanym przez "".
słowa kluczowe android.util.LongSparseArray [] android.content.res.Resources
problem podejrzanego 2
209 powtórzenia "android.graphics.NinePatch", obciążonego "" zajmują 5,679,088 (21,22%) bajtów. Przykłady te są odniesienia z jednego wystąpienia "java.lang.Object []" ładowany "" kluczowe java.lang.Object [] android.graphics.NinePatch
problem podejrzanego 3
8 wystąpień "java.lang.reflect.ArtMethod []", ładowanych przez "" zajmuje 3 630 376 (13,57%) bajtów. Największe przypadki: • java.lang.reflect.ArtMethod [62114] @ 0x70b19178 - 1 888 776 (7.06%) bajtów. • java.lang.reflect.ArtMethod [21798] @ 0x706f5a78 - 782,800 (2,93%) bajtów. • java.lang.reflect.ArtMethod [24079] @ 0x70a9db88 - 546,976 (2,04%) bajtów. Słowa kluczowe java.lang.reflect.ArtMethod []
To wszystko za pomocą prostego kodu:
import android.app.Activity;
import android.os.Bundle;
public class MainActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
}
pytania
- Dlaczego liczby kupie takie duże. ? Również na marginesie aplikacja zużywała 52 MB pamięci RAM w systemie.
- Gdzie są te 209 wystąpienia NinePatch? Po prostu stworzyłem projekt, robiąc "Utwórz nowy projekt" w Eclipse?
- Pierwszy wyciek podejrzany o zasoby, Pojawia się cały czas w mojej analizie aplikacji. Czy to naprawdę jest podejrzany?
- Co to jest ArtMethod? Czy musi coś zrobić z środowiskiem wykonawczym ART?
Nie sądzę, że jest to funkcja systemu operacyjnego. Dla mojej aplikacji istnieje wysoki przydział sterty dla "android.content.res.Resources" i "android.graphics.NinePatch" na urządzeniach xhdpi/xxhdpi nawet na KitKat. Zobacz to pytanie, aby uzyskać więcej informacji: http://stackoverflow.com/q/30980112/3446669 – GunnerFan