ja próbuje dowiedzieć się wyciek pamięci APP przez MAT
, tu w list_object
znalazłem jakąś wartość liczbową int Shallow heap
i retained heap
kolumny. Co to jest ta wartość i jak wiedzieć, gdzie jest wyciek pamięci.Android: jaka jest różnica między płytką a zatrzymanego sterty
Odpowiedz
Od Nikita Salnikov-Tarnovski's blog:
Płytkie sterty jest prosta - składa się z tylko sterty zajmowanych przez samego obiektu. Istnieją pewne niuanse, aby to obliczyć, ale w zakresie tego artykułu pozostawiamy go w niezmienionym stanie. Bądź na bieżąco z przyszłymi postów na ten sam temat.
Zachowane sterty są pod wieloma względami bardziej interesujące. Rzadko zdarza się, że jesteś zainteresowany płytką stertą, w większości przypadków twoje aktualne pytanie można przetłumaczyć na "Jeśli usunę ten obiekt z pamięci, to jak dużo pamięci może teraz zostać uwolnione przez moduł czyszczenia pamięci".
Teraz, jak wszyscy pamiętamy, wszystkie garbage collection Java (GC) algorytmy śledzić tę logikę:
1) Istnieją pewne przedmioty, które są uważane za „ważne” przez GC. Są to nazywane korzeniami GC i są (prawie) nigdy odrzucane. Są na przykład , aktualnie wykonujące parametry lokalne zmiennej i parametry wejściowe , wątki aplikacji, odniesienia z natywnego kodu i podobnych "globalnych" obiektów.
2) Zakłada się, że wszelkie obiekty przywoływane z tych korzeni GC są w użyciu , a zatem nie są odrzucane przez GC. Jeden obiekt może odwoływać się do innego w Javie, w najczęstszym przypadku obiekt A jest przechowywany w polu obiektu B. W takim przypadku mówimy "B odnośniki A".
3) Proces jest powtarzany, dopóki wszystkie obiekty, które mogą być przechodnie osiągnięte z korzeni GC, są odwiedzane i oznaczone jako "w użyciu".
4) Wszystko inne jest nieużywane i można je wyrzucić.
W prostych słowach Płytka sterta obiektu to jego wielkość w stercie, a zachowany rozmiar tego samego obiektu to ilość pamięci sterty, która zostanie zwolniona po zebraniu śmieci. More Details
From eclipse memory analyser docs
niewielka w porównaniu zatrzymane sterty
Płytki sterty jest pamięć spożywane przez jeden obiekt. Obiekt wymaga 32 lub 64 bitów (w zależności od architektury systemu operacyjnego) na odniesienie, 4 bajty na liczbę całkowitą, 8 bajtów na długość itd. W zależności od formatu zrzutu sterty rozmiar może być dostosowany (np. Wyrównany do 8, itp. ...) w celu lepszego modelowania rzeczywistego zużycia VM.
Zestaw zatrzymany z X to zestaw obiektów, które zostaną usunięte przez GC , gdy X jest zbiorem śmieci.
zatrzymane sterty X jest sumą płytkich rozmiarów wszystkich obiektów w niepodzielonego zbiór X, czyli pamięć utrzymywane przy życiu przez X.
Generalnie, płytkie sterty obiektu jest jego wielkość w stertą i zachowanym rozmiarem tego samego obiektu jest ilość pamięci sterty, która zostanie zwolniona, gdy obiekt zostanie zbufowany.
Zatrzymane ustawiony czołową zestawu przedmiotów, takich jak wszystkie obiekty określonej klasy lub wszystkich obiektów wszystkich klas obciążany szczególności ładowarki klasy lub po prostu pęczek dowolnych obiektów jest zestaw obiektów zostanie zwolniony, jeśli wszystkie obiekty tego zestawu wiodącego staną się niedostępne. Zachowany zbiór obejmuje również te obiekty, jak wszystkie inne obiekty dostępne tylko za pośrednictwem tych obiektów. Zachowany rozmiar jest całkowitym rozmiarem sterty wszystkich obiektów zawartych w zachowanym zbiorze.
Minimalna zatrzymane Rozmiar daje dobre (pod) oszacowanie wielkości zatrzymanego na który jest obliczany sposoby szybciej niż dokładna zatrzymanego wielkości zbioru obiektów. Zależy to tylko od liczby obiektów w zbiorze sprawdzonym, a nie od liczby obiektów w zrzucie sterty.
- 1. Jaka jest różnica między @android a android:
- 2. Jaka jest różnica między opryskiwaniem sterty, przepełnieniem sterty, przekroczeniem sterty?
- 3. Jaka jest różnica między RSS a stertą?
- 4. Jaka jest różnica między Listą a ArrayList?
- 5. Jaka jest różnica między skanowaniem sterty a skanowaniem sterty bitmap w postgresie?
- 6. Android: Jaka jest różnica między View.inflate a getLayoutInflater(). Nadmuchać?
- 7. Jaka jest różnica między układem a kontenerem w systemie Android?
- 8. Jaka jest różnica między cat_id a term_id?
- 9. Jaka jest różnica między IEnumerable a tablicami?
- 10. Jaka jest różnica między == a === w Verilog?
- 11. Jaka jest różnica między UseCase a Workflow?
- 12. Jaka jest różnica między pakietem a intencją?
- 13. Jaka jest różnica między węzłem a wierzchołkiem?
- 14. Jaka jest różnica między Ember.computed.alias a Ember.binding?
- 15. Jaka jest różnica między alertem a window.alert?
- 16. Jaka jest różnica między krotką a kompresją?
- 17. Jaka jest różnica między proxy a reify?
- 18. Jaka jest różnica między @Inject a @PersistenceContext?
- 19. Jaka jest różnica między sqlite3 a pdo_sqlite
- 20. Jaka jest różnica między Const a Constant?
- 21. Jaka jest różnica między Socket.IO a Firebase?
- 22. Jaka jest różnica między macierzą a tablix?
- 23. Jaka jest różnica między KERN_INVALID_ADDRESS a KERN_PROTECTION_FAILURE?
- 24. Jaka jest różnica między Float.POSITIVE_INFINITY a Float.MAX_VALUE?
- 25. Jaka jest różnica między SGML a XML?
- 26. Jaka jest różnica między Cake a Leiningen?
- 27. Jaka jest różnica między JavaBean a POJO?
- 28. Jaka jest różnica między kopiowaniem a klonowaniem?
- 29. Jaka jest różnica między HAVING a WHERE?
- 30. Jaka jest różnica między ItemTemplate a ItemPanelTemplate?
Ciekawy, w jaki inny sposób obiekt może odwoływać się do innego, niż być przechowywany w polu? – marekdef
@marekdef Nie pytaj tutaj. Spróbuj komentować na blogu [autorskiego autora] (https://plumbr.eu/blog/how-much-memory-what-is-retained-heap). – Gilles