Instrumentami Dalvik VM i chciałbym wiedzieć, czy istnieją narzędzia do analizy zbierania śmieci w Dalvik. Wiem o śledzeniu alokacji, ale szukam czegoś bardziej wyszukanego.Narzędzie do zbierania śmieci dla dalvik
Odpowiedz
Wirtualny dziennik wszystkich operacji GC w czasie:
każdym razem GC odbywa, masz linię w swojej LogCat.
08-08 16:42:21.998: D/dalvikvm(26942): GC_CONCURRENT freed 773K, 26% free 4739K/6368K, paused 4ms+3ms, total 92ms
08-08 16:42:21.998: D/dalvikvm(26942): WAIT_FOR_CONCURRENT_GC blocked 11ms
Wygląda na to, że otrzymuję je dla wszystkich aplikacji na moim urządzeniu.
Ta linia zawiera wiele interesujących statystyk dotyczących GC, takich jak ilość pamięci zwolnionej, jak długo zajęło GC, kiedy dokładnie to się stało i rozmiar sterty (wykorzystany/całkowity).
Ponieważ wszystkie te linie dziennika mają znacznik dalvikvm
, powinieneś być w stanie je zbierać i filtrować przez długi czas i analizować, aby poznać zachowanie GC.
Analizując konkretny przebieg GC:
Jeśli chcesz analizować to, co dzieje się w jednej konkretnej operacji GC, najlepszym narzędziem do tego zadania jest Eclipse MAT. Eclipse MAT może analizować zrzuty sterty. Zrób migawkę sterty, poczekaj na GC (lub uruchom ją sam, używając DDMS), a następnie wykonaj kolejną migawkę.
Eclipse MAT może pokazać różnicę między dwoma migawkami. Zauważ, że zobaczysz zarówno nowe alokacje, jak i zwolnienia spowodowane GC. Więcej informacji na temat porównywania migawek to available here.
Niektóre inne myśli:
Nie jestem pewien, ile byłbyś w stanie uczyć się od analizy procesu GC. Wewnętrzne funkcjonowanie GC jest szczegółem realizacji. Może zmienić się bez powiadomienia między wersjami/urządzeniami/konfiguracjami systemu operacyjnego.
Próbuję wymyślić sposoby na poprawę opóźnienia GC. Wydaje mi się, GC zwykle działa, gdy warunki pamięci są niskie. Prawdopodobnie dzieje się tak podczas nowych przydziałów, dlatego GC może być uruchomiony, gdy twoja usługa jest aktywna. Być może, jeśli użyjesz czasu, w którym twoja usługa jest nieaktywna dla GC ręcznie, będziesz w stanie zmniejszyć liczbę zdarzeń GC na krytycznej ścieżce odpowiedzi na żądanie sieci. Aby to wypróbować, dodałbym prosty licznik czasu i zresetował go, gdy moja usługa stanie się aktywna (nowe żądanie). Kiedy tykasz zegar (nieaktywność przez pewien okres czasu), uruchomię ręcznie System.gc()
.
- 1. Czy język nieinterpretowany może zawierać narzędzie do zbierania śmieci?
- 2. Czas zbierania śmieci Java?
- 3. Algorytm zbierania śmieci JVM
- 4. Zatrzymywanie zbierania śmieci dla niezarządzanego delegata
- 5. Zbieranie śmieci w dalvik vm
- 6. Podsumowanie ostatniej dekady zbierania śmieci?
- 7. podłańcuchy i urządzenie do zbierania śmieci Go
- 8. Niezwykle długie czasy zbierania śmieci
- 9. Obiekty kwalifikujące się do zbierania śmieci
- 10. Odświeżenie przeglądarki nie powoduje zbierania śmieci
- 11. Jakie są "precyzyjne" algorytmy zbierania śmieci?
- 12. Czy gcc 4.8.1 ma obsługę C++ 11 do zbierania śmieci?
- 13. Czy Objective-C ma moduł do zbierania śmieci na iPhonie?
- 14. wyjątek scbl Sterty wyczerpane podczas zbierania śmieci
- 15. W którym miejscu jest dokładnie dostępny obiekt do zbierania śmieci?
- 16. Czy powinniśmy używać "śmieci" do zbierania śmieci "stacji roboczej" lub "serwera"?
- 17. Co to jest podejście do zbierania śmieci języka Go w porównaniu do innych?
- 18. Zbieranie śmieci z systemu Android dalvik może się zawiesić?
- 19. Czy istnieje narzędzie do zbierania statystyk użycia aplikacji Win32?
- 20. Przeciek pamięci podczas korzystania ze zbierania śmieci za pomocą glib
- 21. Jakie algorytmy zbierania śmieci wykorzystują wszystkie 5 głównych przeglądarek?
- 22. Czy zbierania śmieci Objective-C 2.0 zbierać struktury C?
- 23. Czy ten obiekt java kwalifikuje się do zbierania śmieci na liście
- 24. Czy są jakieś potencjometry odwołujące się do Pythona/wątki zbierania śmieci podczas pracy z kodem C?
- 25. Kiedy i jak jest oznaczany program ładujący klasy java do zbierania śmieci?
- 26. Kosz na śmieci i klasa statyczna, zmienna
- 27. Narzędzie do podrobienia dla Lua
- 28. Czy metoda zbierania śmieci CLR oznacza, że można bezpiecznie rzucać odwołania do obiektów kołowych?
- 29. Czy istnieje maszyna JVM, która nie jest wyposażona w moduł do zbierania śmieci?
- 30. Dlaczego moduł do zbierania śmieci zwolnił wydajność i jak zarządzać pamięcią bez tego?
Myślę, że DDMS pomoże. –
Jaki problem próbujesz rozwiązać? –
Mam uruchomioną usługę w tle na moim urządzeniu, która wykrywa ruch internetowy i działa jako serwer proxy dla innych aplikacji internetowych na urządzeniu. Mój problem polega na tym, że garbage collector zajmuje znacznie więcej czasu niż normalne wykonanie. Powoduje to zatrzymanie usługi w tle, co z kolei prowadzi do spowolnienia reakcji sieci na aplikację. Próbuję zajrzeć w to nagłe zachowanie śmieciarza. – 22kar