Minęły trzy dni więc pora na kolejne słowa na temat Javy. Dzisiaj przyjrzymy się uważnie co się dzieje "pod spodem" w chwili tworzenia obiektów i deklarowania zmiennych. To już dotyka niskich warstw systemu w kwestii przydzielania pamięci, aczkolwiek każdy programista Java powinien wiedzieć jak to wygląda w praktyce. Pokażę Wam jak wygląda stos i sterta. Pokażę czym się różnią te struktury danych od siebie oraz na czym polega przechowywanie danych na jednym i drugim.

STOS I STERTA. KONFRONTACJA STRUKTUR DANYCH

Zacznę od definicji. Struktura danych to sposób przechowywania obiektów (w sensie zaalokowanych rzeczywistych miejsc) w pamięci komputera. Rzucimy okiem na dwa podstawowe, na stos i stertę jednak jest ich o wiele więcej, które zawsze możemy zaimplementować.

Stos to podstawowa struktura przechowywania danych. Polega on na "kładzeniu" danych i wywołań metod jeden na drugi. Przechowuje również zmienne lokalne, które mogą występować w funkcjach jako parametry formalne, bądź dodatkowe zmienne umieszczane w środek bloku kodu. Cechą charakterystyczną stosu jest sposób obsługi danych. Przypomina on stos talerzy z którego nie możemy wyjąć elementu ze spodu ani ze środka. Możemy jedynie operować na wierzchu stosu, na ostatnim elemencie. W przypadku wywołań metod to również ma sens, bo to określa cykl życia funkcji (i zawartych zmiennych lokalnych), jak również kolejność wykonywania czynności w metodach gdzie pierwszeństwo ma zawsze ta najbardziej wysunięta na górze.

Sterta z kolei to struktura polegająca na obsługiwaniu "połączeń" do obiektów czy struktur (jak w C) na podstawie adresu (referencji). Dzięki temu, możliwym staje się przedostawanie się do określonego obiektu poprzez adres przechowany w innej zmiennej, we wskaźniku. W Javie, zmienne typu klasowego przechowują NIE same w sobie obiekty, tylko odniesienia do nich w postaci referencji! Zapamiętajcie tę informację, ona jest najważniejsza! Druga rzecz to taka, że dane osadzone na stercie nie usuwają się automatycznie tak jak ma to miejsce przy stosie, tylko trzeba samemu zadbać o zwolnienie pamięci, aby nie doszło do wycieku. Nawet, gdy obiekt jest sam w sobie zmienną lokalną umieszczoną w bloku metody, to i tak umieszczony on jest na stercie i "podpięty" pod adres jaki otrzymuje zmienna referencyjna.

Stos i sterta to podstawowe struktury, które musicie umieć dostrzec i rozróżnić niezależnie od tego, czy sami alokujecie pamięć, czy robi to za Was język.

Stos i sterta w języku Java Stos i sterta w języku Java

Dwie podstawowe struktury danych, które trzeba znać to stos i sterta. Różnią się sposobem przechowywania danych oraz przeznaczeniem.


To wszystko w tym temacie. Krótko i zwięźle, bo to same konkrety, aczkolwiek każdy piszący regularnie kod musi dostrzegać te różnice jak zachowuje się w pamięci stos i sterta.

PODOBNE ARTYKUŁY