Aplikacje, które zajmują dużo pamięci

Platforma Android działa na zasadzie, że wolna pamięć to zmarnowana pamięć. Android stara się zawsze używać całej dostępnej pamięci. Na przykład system przechowuje aplikacje w pamięci po ich zamknięciu, aby użytkownik mógł szybko do nich wrócić. Z tego powodu urządzenia z Androidem często działają z bardzo małą ilością wolnej pamięci (zobacz przydział pamięci na urządzeniu z Androidem).

Proces demona LMK (low memory killer) w Androidzie monitoruje stan pamięci uruchomionego systemu Android i reaguje na wysokie obciążenie pamięci, zamykając procesy o najmniejszym znaczeniu, aby zachować akceptowalny poziom wydajności systemu.

Aby zdecydować, który proces należy zakończyć, demon LMK używa wyniku brak pamięci o nazwie oom_adj_score do ustalania priorytetów dla uruchomionych procesów. Procesy o wysokiej wartości są zabijane jako pierwsze. Najpierw zabijane są aplikacje działające w tle, a na końcu procesy systemowe. W tabeli poniżej znajdziesz kategorie oceny LMK od najwyższej do najniższej. Elementy w kategorii o najwyższym wyniku, w pierwszym wierszu, są eliminowane jako pierwsze:

Procesy Androida uporządkowane według najwyższego wyniku od najwyższego do najniższego: aplikacje w tle, poprzednia aplikacja, aplikacja główna, usługi, aplikacje wyczuwalne, aplikacja na pierwszym planie, trwałe, systemowe i natywne.
Rysunek 1. Procesy Androida z wysokimi wynikami u góry i niskim u dołu.

Dane LMK w Android Vitals

Android Vitals może pomóc w monitorowaniu i ulepszaniu współczynnika LMK aplikacji. Android Vitals mierzy tylko 1 wartość LMK: częstotliwość błędów LMK widocznych dla użytkowników.

Dane te odzwierciedlają odsetek aktywnych użytkowników dziennie, u których wystąpił co najmniej 1 widoczny dla nich błąd LMK. Błąd LMK widoczny dla użytkowników to błąd LMK, który prawdopodobnie został zauważony przez użytkownika. Obejmuje to na przykład błędy występujące wtedy, gdy aplikacja wyświetla aktywność lub działa jako usługa na pierwszym planie.

Dane te znajdziesz w sekcji Stabilność w Android Vitals:

Rysunek 2. W Android Vitals otwórz Częstotliwość błędów LMK widocznych dla użytkowników.

Podobnie jak w przypadku innych podstawowych danych, takich jak ANR i awarie, możesz filtrować dane, porównywać je z danymi innych deweloperów lub śledzić zmiany danych przez długi okres (do 3 lat). Dane są dostępne w przypadku dotychczasowych aplikacji od 28 stycznia 2025 r.

Rysunek 3. Przegląd częstotliwości błędów LMK w Android Vitals

Narzędzia do profilowania pamięci

W diagnozowaniu problemów z pamięcią mogą Ci pomóc te narzędzia:

  • Zobacz, jak Twoja aplikacja przydziela pamięć w ciągu czasu. Znajdziesz tu wykres w czasie rzeczywistym pokazujący, ile pamięci używa aplikacja, liczbę przydzielonych obiektów Java oraz kiedy następuje zbieranie elementów.
  • Inicjowanie zdarzeń usuwania elementów i robienie zrzutu stosu pamięci Java podczas działania aplikacji.
  • Rejestruj przydziały pamięci aplikacji, sprawdzaj przydzielone obiekty i wyświetlaj ślady stosu dla każdego przydziału.

Narzędzie Memory Profiler w Android Studio

Android Studio udostępnia profilator pamięci jako element profilatora Androida, który pomaga wykrywać przecieki pamięci i zmiany pamięci, które mogą powodować zacinanie, zawieszanie się i nawet awarie aplikacji. Profilator wyświetla w czasie rzeczywistym wykres wykorzystania pamięci przez aplikację. Umożliwia też wykonanie zrzutu stosu, wymuszenie usuwania zbędnych danych i śledzenie alokacji pamięci.

Rysunek 4. Wyświetlanie globalnych odwołań JNI w Android Studio w profilu pamięci.

Narzędzia do profilowania pamięci w Unity

Jeśli do tworzenia aplikacji używasz Unity Engine, możesz postępować zgodnie z wskazówkami dotyczącymi profilowania pamięci w Unity. Unity udostępnia 2 narzędzia do analizowania wykorzystania pamięci w aplikacji.

Pierwszym z nich jest moduł profilowania pamięci, czyli wbudowany profilator, który dostarcza podstawowych informacji o tym, gdzie aplikacja używa pamięci.

Moduł pamięci pokazuje alokacje pamięci, takie jak pamięć tekstur i pamięć siatki.
Rysunek 5. Okno narzędzia Unity Profiler z wybranym modułem Pamięć.

Drugim narzędziem jest pakiet Profilera pamięci, czyli pakiet Unity, który możesz dodać do projektu. Pakiet dodaje do edytora Unity dodatkowe okno profilu pamięci. Profilator pamięci umożliwia jeszcze bardziej szczegółową analizę wykorzystania pamięci przez aplikację. Możesz przechowywać i porównywać zrzuty, aby wykrywać wycieki pamięci, lub sprawdzać układ pamięci, aby wykrywać problemy z jej fragmentacją.

Rysunek 6. Analizowanie zrzutu pamięci w oknie narzędzia Profiler pamięci.

Statystyki pamięci w Unreal

Aplikacje utworzone za pomocą Unreal Engine mogą korzystać z Unreal Memory Insights, aby uzyskać szczegółowe informacje o przydzielaniu i zwalnianiu pamięci, w tym tagi pamięci niskiego poziomu (LLM) oraz stosy wywołań powiązane z blokami pamięci.

System zapytań funkcji Insights dotyczących pamięci może w dowolnym momencie znajdować przydzielone zasoby w czasie rzeczywistym, rozpoznawać zmiany w wykorzystaniu pamięci, wykrywać wycieki pamięci i odróżniać przydzielone zasoby krótkoterminowe od długoterminowych.

Od wersji UE 5.4 statystyki pamięci obsługują śledzenie pamięci za pomocą łańcuchów wywołań w przypadku projektów na Androida.

Śledzenie statystyk pamięci z wykresem pamięci głównej, liczbą przydziału na żywo i liczbą zdarzeń przydziału/zwolnienia.
Rysunek 6. Śledzący narzędzie Memory Insights w Unreal.

Dodatkowe materiały