Alokacja pamięci w Javie: wszystko, co musisz wiedzieć w 2022 r.
Opublikowany: 2021-01-10Alokacja pamięci w java odnosi się do procesu, w którym programy komputerowe i usługi są przydzielane do przestrzeni pamięci wirtualnej. Wirtualna maszyna Javy dzieli pamięć na pamięć stosu i stertę. W przypadku wirtualnej maszyny Java wykonanie aplikacji w jej maksymalnym potencjale może nastąpić z pamięci stosu i sterty. Za każdym razem, gdy deklarowana jest nowa zmienna lub obiekt, pamięć alokuje pamięć przeznaczoną na takie operacje.
Spis treści
Pamięć stosu
Alokacja Stock Memory w java jest używana do pamięci statycznej i wykonywania wątków. Wartości zawarte w tej pamięci są tymczasowe i ograniczone do określonych metod, ponieważ są do nich odwoływane w sposób ostatni na pierwszym miejscu.
Gdy tylko pamięć zostanie wywołana i zostanie utworzony nowy blok w pamięci stosu, pamięć stosu przechowuje wartości pierwotne i referencje, dopóki metoda nie będzie trwać. Po jego zakończeniu blok jest opróżniany i jest dostępny dla nowego procesu. Ogólnie rzecz biorąc, całkowity rozmiar pamięci stosu jest nieistotny w porównaniu z pamięcią sterty.
Naucz się tworzyć aplikacje, takie jak Swiggy, Quora, IMDB i nie tylkoCharakterystyka pamięci stosu
W oparciu o różne sekcje alokacji pamięci w wirtualnej maszynie Java (JVM) poniżej przedstawiono niektóre dyskretne funkcje pamięci stosu:
- Pamięć stosu może rosnąć lub kurczyć się w miarę wywoływania i zwracania nowych metod.
- Dowolna zmienna w stosie może działać tak długo, jak istnieje zakres metody.
- Pobiera automatyczną alokację i cofanie alokacji, gdy metoda jest wykonywana.
- W przypadku zapełnienia pamięci uruchamia się java.lang.StackOverFlowError.
- Jest szybszy w dostępie w porównaniu do pamięci sterty.
Przeczytaj: Full-Stack vs. Software Engineer: Który z nich wybrać?
Metody używane w alokacji pamięci stosu w java
- Object push(Object element): Tutaj element jest wypychany na szczyt stosu.
- Object pop(): Każdy element znajdujący się na szczycie stosu jest opróżniany i zwracany. W przypadku, gdy stos jest wolny w momencie wywołania funkcji pop(), występuje wyjątek – EmptyStackException.
- Object peek(): Tutaj zwracany jest górny element, ale nie podlega opróżnianiu.
- Boolean empty(): Jeśli pętla nie ma żadnej górnej wartości na stosie, funkcja zwraca 1 (prawda), w przeciwnym razie 0 (fałsz).
- In search(Object element): Służy do sprawdzenia, czy obiekt znajduje się na stosie. W przypadku znalezienia wartości funkcja zwraca położenie elementu ze szczytu stosu, w przeciwnym razie zwraca -1.
Przeczytaj: Projekty i tematy Java dla początkujących

Przestrzeń sterty Java
Używana głównie przez środowisko uruchomieniowe Java, Java Heap Space wchodzi do gry za każdym razem, gdy obiekt jest w nim tworzony i przydzielany. Funkcja dyskretna, taka jak Garbage Collection, opróżnia pamięć używaną przez poprzednie obiekty, które nie mają odniesienia. Do obiektu utworzonego w Heap Space można mieć swobodny dostęp w całej aplikacji.
Alokacja pamięci w java jest podzielona na części, a mianowicie Heap, Stack, Code i Static.
Charakterystyka pamięci sterty Java
- Dostępne ze skomplikowanej techniki zarządzania pamięcią, w tym Young Generation, Old lub Tenured Generation oraz Permanent Generation.
- W pamięci sterty, gdy się zapełni, zwraca java.lang.OutOfMemoryError.
- Dostęp w tej pamięci jest stosunkowo wolniejszy niż w pamięci stosu.
- Nie podlega automatycznemu cofaniu alokacji i wymaga podobnej funkcji jak Garbage Collector do usuwania obcych obiektów, aby pamięć działała w optymalnym stanie.
Przykładem alokacji pamięci stosu i sterty w javie jest:


Źródło
Przestrzeń sterty i pamięć stosu: podstawowe różnice
Pamięć przestrzeni sterty | Pamięć stosu |
Wszystkie części aplikacji wywołują pamięć sterty. | Wykonywanie pamięci stosu jest ograniczone do jednego wątku. |
Za każdym razem, gdy tworzony jest obiekt, jest on przechowywany w przestrzeni sterty. | Pamięć stosu zawiera tylko swoje zmienne referencyjne i lokalne zmienne pierwotne. |
Obiekty tutaj są dostępne globalnie w całej aplikacji. | Inne wątki nie mogą uzyskać dostępu do obiektów pamięci stosu. |
Tutaj pamięć definiowana jest według młodego i starego pokolenia. | Zarządzanie pamięcią odbywa się na zasadzie Last-In-First-Out. |
Pamięć pozostaje zgodnie z zakresem aplikacji. | Pamięć jest tymczasowa. |
Metody takie jak – XMX i XMS JVM służą do określenia optymalnego rozmiaru pamięci sterty. | W przypadku pamięci stosu określa się ją metodą -XSS. |
Tutaj wyjątek java.lang.OutOfMemoryError występuje w przypadku pełnej pamięci. | W tym przypadku błąd java.lang.StackOverFlowError występuje w przypadku zapełnienia pamięci. |
Rozmiar jest większy, ale jego przetworzenie zajmuje trochę czasu w porównaniu z pamięcią stosu. | Rozmiar jest mniejszy, ale szybszy w wykonaniu, co zapewnia płynne działanie LIFO. |
Przeczytaj także: Wynagrodzenie programisty Java w Indiach
Ucz się kursów oprogramowania online z najlepszych światowych uniwersytetów. Zdobywaj programy Executive PG, Advanced Certificate Programs lub Masters Programs, aby przyspieszyć swoją karierę.
Wniosek
Alokacja pamięci w java odbywa się na dwa sposoby, głównie na stosie i stercie. Mamy nadzieję, że pomogło to w zrozumieniu całego procesu.
Jeśli chcesz dowiedzieć się więcej o tworzeniu oprogramowania z pełnym pakietem, zapoznaj się z programem Executive PG UpGrad i IIIT-B w zakresie tworzenia oprogramowania z pełnym pakietem, który jest przeznaczony dla pracujących profesjonalistów i oferuje ponad 500 godzin rygorystycznych szkoleń, ponad 9 projektów, i zadania, status absolwentów IIIT-B, praktyczne praktyczne projekty zwieńczenia i pomoc w pracy z najlepszymi firmami.
Jak działa zarządzanie pamięcią w Javie?
Java Virtual Machine (JVM) to program komputerowy służący do uruchamiania programów napisanych w języku programowania Java. To sprawia, że proces korzystania z zarządzania pamięcią jest wydajny. Ponadto został zaprojektowany tak, aby był niezawodny, dzięki czemu nawet w przypadku awarii systemu operacyjnego nie ma to wpływu na program działający na maszynie JVM. Zarządzanie pamięcią oznacza zarządzanie każdym fragmentem pamięci (RAM) w systemie komputerowym. JVM monitoruje przydzielanie i zwalnianie pamięci w razie potrzeby. Gdy tylko program zostanie załadowany do pamięci, JVM przydziela mu miejsce w pamięci. Ten proces nazywa się stertą. Sterta to wspólny obszar pamięci dla wielu części aplikacji.
Co to jest zbieranie śmieci w Javie?
Wirtualna maszyna języka Java (JVM) używa zliczania odwołań do śledzenia liczby obiektów Java. Zanim jakikolwiek obiekt będzie mógł zostać zebrany, liczba odniesień do tego obiektu musi osiągnąć zero. Program użytkownika może jawnie usuwać obiekty, wywołując metodę finalize(). Finalize jest statyczną metodą w klasie Object, która jest wywoływana przez Garbage Collector (GC). Metoda Finalize zwolni wszystkie zasoby obiektu, zanim Garbage Collector zajmie się tym obiektem. Garbage Collector to proces czyszczenia niechcianych obiektów. Proces Garbage Collector zostanie uruchomiony, gdy system wykonawczy Java wykryje, że sterta Java jest prawie pełna. Każdy obiekt ma bitmapę w JVM. Mapa bitowa jest ustawiana dla każdego obiektu, aby śledzić, czy był używany, czy nie. Gdy bitmapa jest ustawiona na 0, GC zajmie się tym obiektem.
Jakie są cechy języka programowania Java?
Java Programming Language to uniwersalny język programowania wysokiego poziomu, który służy do tworzenia aplikacji i apletów. Oprogramowanie Java może działać na dowolnej platformie obsługującej Javę bez konieczności przeprogramowywania. Cechy języka programowania Java to: funkcje zorientowane obiektowo, solidne, wysokie bezpieczeństwo i niezależne od platformy, bezpłatne, łatwe do nauczenia i użytkowania. Java to obiektowy język programowania, który jest niezależny od platformy i może być również używany na dowolnym systemie operacyjnym lub platformie. Java jest językiem kompilowanym i tworzony jest kod bajtowy, który jest następnie wykonywany w wirtualnej maszynie Java.