• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Stos a sterta w Javie - prośba o praktyczne wyjaśnienie tematu

+1 głos
10,391 wizyt
pytanie zadane 18 listopada 2017 w Java przez Kubs Mądrala (5,190 p.)
Witajcie,

zapoznałem się z ogólnymi informacjami na temat stosu i sterty oraz działaniu stosu.. że na jednej ramce umieszczana jest kolejna ramka itd..

Przeczytałem też gdzieś po drodze, że znajomość podstaw wykorzystania stosu i sterty ma kluczowe znaczenie dla zrozumienia zagadnień związanych z zasięgiem zmiennych, tworzeniem obiektów, zarządzaniem pamięcią, działaniem wątków oraz obsługą wątków.

Wciąż jednak nie wiem jakie jest zastosowanie stosu/sterty w praktyce. Do czego jest tak naprawdę potrzebna nam ta wiedza przy pisaniu programu?

Wybaczcie proszę jeśli to pytanie jest banalne, ale po prostu nie mogę zrozumieć praktycznego sensu stosu i sterty.
komentarz 18 listopada 2017 przez Kubs Mądrala (5,190 p.)
Dziękuję za 'upvote' mojego postu :)

2 odpowiedzi

0 głosów
odpowiedź 18 listopada 2017 przez Frendom Pasjonat (18,900 p.)
wybrane 18 listopada 2017 przez Kubs
 
Najlepsza
Zeby jeszcze bardziej poszerzyc. Na stosie laduja typy proste (int, float, double). I kazda zmienna ma swoje miejsce na stosie. JEDNAK. Jezeli zadeklarujesz np. int liczba1 = 1 oraz int liczba2 = 1, to powstaje referencje do pierwotnego inta w celu oszczedzenia pamieci, czyli te dwa inty bede znajdowaly sie w tym samym miejscu w pamieci. Idac dalej, uzywajac porownania "==" nie porownujemy czy dana wartosc jednej zmiennej jest taka sama jak wartosc drugiej, tylko czy referencje sa takie same.

Teraz troche o stercie. Przechowuje ona typy zlozone (String, Array, Object itd). Przechowuje ona rowniez zmienne statyczne (ktore sa inicjalizowane przy starcie programu i od razu trafiaja do pamieci, zmienne dynamiczne natomiast trafia do pamieciu w momencie odpalenia klasy).

Waznym elementem sterty jest tez StringPool. Jest roznica pomiedzy String s = "kot" a String s1 = new String("kot"). Zmienne lancuchowe bez slowka new trafiaja wlasnie do StringPoola (tutaj ta sama zaleznosc jak z przykladem z intami, ze o tej samej wartosci trafia do tego samego miejsca w StringPool'u). Jezeli uzyjemy slowka new to przydzielimy nowe miejsce w pamieci (stercie).
komentarz 18 listopada 2017 przez Kubs Mądrala (5,190 p.)
Spiesze odpisac i podziekowac. A teraz przeczytam twoja odpowiedz jeszcze raz i jeszcze raz.. zeby dokladnie zrozumiec :)
+2 głosów
odpowiedź 18 listopada 2017 przez Mateusz51 Nałogowiec (28,180 p.)
Powiem szczerze znajomość tematu stosu i sterty na początku jest wiedzą praktycznie całkowicie zbędną.

Ale tak z grubsza sterta i stos są to dwa obszary pamięci które wykorzystuje program podczas działania.

Zacznę od sterty bo jest łatwiejsza. Na stercie alokowane są wszystkie obiekty jakie tworzymy i dostęp do sterty odbywa się poprzez wskazanie komórki pamięci (przez referencje). Stertę współdzielą ze sobą wszystkie wątki programu.

Na stosie zato odkładane są zmienne lokalne (typy proste jak i referencyjne) oraz tworzone są ramki wywołań (czyli wywołań metod danego wątku). Dostęp do stosu realizowany jest jako pop i push. I każdy z wątków ma swój własny oddzielny stos. Dlatego zmienne zawarte na stosie nie mogą być współdzielone przez wątki.
komentarz 18 listopada 2017 przez Kubs Mądrala (5,190 p.)
Dziękuję za odpowiedź. Poszerzyła ona to co już czytałem.

Kiedy więc ta wiedza staje się potrzebna? Tu chyba miałbym jasną odpowiedź na moje pytanie w głównym poście.
komentarz 18 listopada 2017 przez Mateusz51 Nałogowiec (28,180 p.)
Jestem wstanie sobie wyobrazić bardzo dobrego programistę który nie ma tej wiedzy i w niczym mu to nie przeszkadza. Ponieważ jest to szczegół implementacyjny maszyny wirtualnej Java a nie samej specyfikacyj języka.
komentarz 18 listopada 2017 przez Kubs Mądrala (5,190 p.)
Rozumiem :) dziekuje za ta wazna informacje.

Podobne pytania

0 głosów
0 odpowiedzi 967 wizyt
pytanie zadane 21 lutego 2022 w Systemy operacyjne, programy przez Dorian Bajorek Dyskutant (7,920 p.)
+1 głos
0 odpowiedzi 662 wizyt
pytanie zadane 3 maja 2021 w Systemy operacyjne, programy przez tomasz12345 Użytkownik (750 p.)
+1 głos
1 odpowiedź 33,027 wizyt
pytanie zadane 31 maja 2015 w Algorytmy przez fraktal Nowicjusz (200 p.)

93,605 zapytań

142,529 odpowiedzi

322,999 komentarzy

63,096 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj

Kursy INF.02 i INF.03
...