Instruments ObjectAlloc: Objaśnienie aktywnych bajtów i ogólnych bajtów


86

Używam narzędzia ObjectAlloc firmy Instument, aby zrozumieć, co robi moja aplikacja (iPhone) oraz kiedy i gdzie to robi.

Bardzo chciałbym uzyskać podstawowe wyjaśnienie tych statystyk:

  • Live Bytes
  • #Życie
  • #Przejściowy
  • Ogółem bajtów

Kiedy próbuję ustalić, ile pamięci używa moja aplikacja, czy mam spojrzeć na aktywne bajty lub ogólne bajty? Czy obejmuje to wyciek pamięci? Co to są obiekty przejściowe?

Dzięki


6
kolumny mają krótkie opisy po najechaniu kursorem na ich nagłówki.
Piotr Byzia

Odpowiedzi:


110

ObjectAlloc śledzi całą alokację i zwalnianie pamięci w czasie działania programu.

Jest Living bytes, or Net bytesto ilość pamięci używanej przez aplikację w momencie zaznaczenia na osi czasu. Obejmuje to wyciek pamięci, ponieważ wyciekła pamięć nigdy nie jest zwalniana.

#Livingto liczba alokacji określonego rozmiaru / typu obiektu (i nadal są one przydzielane). Jest to bardzo przydatne podczas wyszukiwania wycieków.

Na przykład, jeśli powtarzalnie wykonujesz akcję (na przykład wchodzenie z kontrolera widoku modalnego) i widzisz, że #Livingobiekt za każdym razem rośnie o tę samą wartość, prawdopodobnie przeciekasz te obiekty. Następnie możesz potwierdzić, przechodząc do szczegółów i wyświetlając dokładną linię kodu, która alokuje obiekty, a nawet zobaczyć indeks czasu, w którym każdy z nich został utworzony.

Overall byteszawiera zwolnioną pamięć. Śledzenie tej liczby jest przydatne w celu optymalizacji wydajności, ale nie wtedy, gdy po prostu próbujesz zobaczyć bieżący ślad pamięci lub szukasz wycieków.


3
Co chciałbyś zoptymalizować pod względem ogólnej liczby bajtów? Próba ograniczenia liczby do małych oznacza lepszą wydajność?
Dan Rosenstark

4
Tak, poprawnie. Częstą przyczyną problemów z wydajnością jest przypadkowe uruchomienie tego samego kodu więcej niż raz. Narzędzie Alokacje może być dobrym sposobem na zwrócenie uwagi. Na przykład, nawet jeśli dodatkowe obiekty nie wyciekną, możesz powiedzieć: „Dlaczego zrobiłem 3 z tego obiektu? Powinien istnieć tylko jeden!”.
Ken Aspeslagh

2
Bajty na żywo to ilość pamięci aktualnie używanej przez aplikację. Ogółem to tylko suma wszystkich alokacji dokonanych przez twoją aplikację (w tym pamięć, która została zwolniona).
Ken Aspeslagh

1
@KenAspeslagh dlaczego miałbym przejmować się ogólną liczbą bajtów, jeśli zawiera ona również zwolnione obiekty?
Dejell

3
Jeśli stroisz pod kątem wydajności, chcesz zminimalizować liczbę alokacji dokonywanych przez aplikację podczas działania (nawet jeśli nie przeciekasz tych alokacji). Nadmierne alokacje często mogą wskazywać, że robisz to źle.
Ken Aspeslagh

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.