2010-06-24 13 views
46

Potrzebuję sprawdzić moją aplikację pod kątem wycieków pamięci, muszę również zobaczyć alokację pamięci mojej aplikacji. Pobrałem i zainstalowałem analizator pamięci Eclipse i wygląda na to, że pierwszym krokiem jest otwarcie zrzutu sterty. Ale co to jest zrzut sterty, w jaki sposób mogę utworzyć zrzut sterty. A jak dokładnie mam zamiar korzystać z tego oprogramowania, zrobiłem trochę googling, ale nie mogłem znaleźć żadnych użytecznych informacji dziękiAndroid ==> Analiza pamięci ==> Analizator pamięci Eclipse?

+3

Wystarczy FYI, ponieważ odnosi się do tematu - nowe blogu na blogu na android analizy mem: http://android-developers.blogspot.com/2011/03/memory-analysis-for-android.html –

Odpowiedz

40

Podczas debugowania aplikacji, otwórz DDMS w Eclipse. Na pasku narzędzi znajduje się przycisk zrzutu sterty, za pomocą którego można wygenerować zrzut sterty, aby wyświetlić go w analizatorze pamięci Eclipse. Jest to obsługiwane tylko przez SDK 1.6+ lub 2.0+.

+0

Ok więc kliknąłem zrzutu, a to otworzyło nowy okno o nazwie android123123123 z mnóstwem dziwnych postaci. Co mam zrobić z tą stroną? Gdzie jest plik? Jeszcze raz dziękuję – aryaxt

+2

Sam to wymyśliłem. Plik ==> Zapisz jako, a następnie otworzył plik w pamięci analizatora – aryaxt

+6

Ty pominięto kluczowy krok wymieniony w odpowiedzi: „Mathiasa zrzut sterty Dalvik VM musi być konwertowane do formatu hprof regularnym użyciu konwertera hprof-conv.exe narzędzie w katalogu narzędzi SDK systemu Android. " –

10

Zrzut sterty z Dalvik VM musi być konwertowane do formatu hprof regularnym użyciu konwerter hprof-conv.exe w katalogu tools w Android SDK. Można otworzyć ten hprof z Eclipse MAT lub innych narzędzi są: YourKit http://www.yourkit.com/ i JProbe http://www.quest.com/jprobe/

Obok DDMS można również utworzyć hprof od ciebie app/kodu (tylko nowe SDK) poprzez Debug.dumpHprofData(...)

nocie że w DDMS możesz zobaczyć stertę, z której korzysta twoja aplikacja. Nie pokazuje macierzystej sterty, którą alokują zasoby zewnętrzne, takie jak bitmapy. Niemniej jednak, te zasoby należy również wziąć pod uwagę przy sprawdzaniu wycieków pamięci. Gdy zarówno stertę rodzimą, jak i aplikację dodaje do 16 MB/resp. 24 MB otrzymasz błąd OOM.

Możesz zobaczyć rodzimą stertę, która była używana (np. Bitmapy w Twojej aplikacji) przez Debug.getNativHeapAllocatedSize().

+0

Jestem na mac nie ma takiego thning jak exe, i nie trzeba robić nic z pliku, po prostu zapisać go, jak to było z zaćmienia, i otworzył je z pamięci analizatora, bez problemu – aryaxt

+1

@MathiasLin, czy istnieje sposób analizowania/przeglądania obiektów w rodzimym stercie? – snapfractalpop

+0

@ snapfractalpop przepraszam, nie wiem, nie szukałem takich jeszcze. –

3

zobaczyć również http://developer.android.com/guide/developing/debugging/ddms.html#profiling

Jeśli to nie pomaga, można włączyć profilowanie nad lokalnych obszarach kodu za pomocą API debugowania. W ten sposób masz mniej szczegółowości podczas analizowania śladów na przykład w trybie śledzenia. Zobacz przykłady: http://macgyverdev.blogspot.com/2011/07/profiling-android-application-tutorial.html.

A niektóre bardziej szczegółowe informacje na temat konwersji DDMS hałdy, wysypiska, dzięki czemu można je przeglądać w Eclipse Memory Analyzer i znaleźć swoje obiekty rodzaju nieszczelności za pomocą oprzyrządowania drzewa dominator: http://macgyverdev.blogspot.com/2011/11/android-track-down-memory-leaks.html