2012-10-03 6 views

Odpowiedz

14

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ć.

+0

Ciekawy, w jaki inny sposób obiekt może odwoływać się do innego, niż być przechowywany w polu? – marekdef

+0

@marekdef Nie pytaj tutaj. Spróbuj komentować na blogu [autorskiego autora] (https://plumbr.eu/blog/how-much-memory-what-is-retained-heap). – Gilles

1

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

6

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. enter image description here

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.

Powiązane problemy