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.