Zarejestruj alokacje natywne

Jeśli piszesz kod natywy i martwisz się jego zużyciem pamięci, warto przeprowadzić profilowanie przydziału pamięci natywnej aplikacji, aby sprawdzić, czy można ją zoptymalizować.

Dlaczego warto przeprowadzić profilowanie pamięci aplikacji

Android zapewnia sterowane środowisko pamięci – gdy system stwierdzi, że aplikacja nie używa już niektórych obiektów, zbieracz śmieci zwalnia nieużywaną pamięć z powrotem do stosu. Sposób, w jaki Android wyszukuje niewykorzystaną pamięć, jest stale ulepszany, ale w pewnym momencie w każdej wersji Androida system musi na krótko wstrzymać działanie kodu. W większości przypadków przerwy są niezauważalne. Jeśli jednak Twoja aplikacja przydziela pamięć szybciej niż system może ją zebrać, może się opóźnić, dopóki zbieracz nie zwolni wystarczającej ilości pamięci, aby zaspokoić Twoje potrzeby. Opóźnienie może spowodować pomijanie klatek przez aplikację i widoczne spowolnienie działania.

Informacje o praktykach programowania, które mogą zmniejszyć użycie pamięci przez aplikację, znajdziesz w artykule Zarządzanie pamięcią aplikacji.

Omówienie alokacji natywnych

Gdy uruchomisz zadanie Śledź zużycie pamięci (alokacje natywnych), profil narzędzia Android Studio śledzi alokacje i zwolnienia obiektów w natywności w okresie, który określisz, oraz udostępnia te informacje:

  • Przypisania: liczba obiektów przypisanych za pomocą operatora malloc() lub new w wybranym okresie.
  • Deallocations: liczba obiektów odłączonych za pomocą operatora free() lub delete w wybranym okresie.
  • Rozmiar alokacji: zsumowany rozmiar w bajtach wszystkich alokacji w wybranym okresie.
  • Rozmiar zwolnienia pamięci: łączny rozmiar w bajtach całej zwolnienia pamięci w wybranym okresie.
  • Łączna liczba: wartość w kolumnie Przypisania pomniejszona o wartość w kolumnie Przypisania na podstawie umowy.
  • Pozostała wielkość: wartość w kolumnie Rozmiar alokacji pomniejszona o wartość w kolumnie Rozmiar alokacji w ramach umowy.

Karta Wizualizacja zawiera zbiorczy widok wszystkich obiektów związanych z kodem natywnym w zbiorze wywołań w wybranym zakresie dat. W podstawie pokazuje, ile pamięci zajmuje stos wywołań z wyświetlonymi instancjami. Pierwszy wiersz zawiera nazwę wątku. Domyślnie obiekty są ułożone od lewej do prawej na podstawie rozmiaru alokacji. Aby zmienić kolejność, użyj menu.

Domyślnie profilator używa próbki o rozmiarze 2048 bajtów: za każdym razem, gdy przydzielone jest 2048 bajtów pamięci, wykonywany jest jej migawka. Mniejsza próbka powoduje częstsze migawki, co daje dokładniejsze dane o użyciu pamięci. Większa próbka daje mniej dokładne dane, ale zużywa mniej zasobów systemowych i poprawia wydajność podczas nagrywania. Aby zmienić rozmiar próbki, zapoznaj się z artykułem Edytuj konfigurację nagrywania.