Alokacja pamięci to proces, w wyniku którego programom komputerowym i usługom przypisuje się fizyczne lub wirtualne elementy pamięć przestrzeń. W tym artykule dowiemy się o alokacji pamięci w i omówimy pamięć stosu i sterty.
- Co to jest pamięć stosu
- Kluczowe cechy pamięci stosu
- Metody w klasie Stack
- Kod Java do implementacji stosu
- Miejsce na sterty w Javie
- Kluczowe cechy pamięci sterty
- Różnica między przestrzenią sterty Java a pamięcią stosu
- Wykres porównania
Co to jest pamięć stosu?
Pamięć Java Stack jest używana do wykonywania wątku. Zawierają wartości specyficzne dla metody, które są krótkotrwałe i odwołania do innych obiektów w stercie, do którego są odwoływane z metody.
marionetka vs ansible vs szef kuchni
Stos pamięć jest zawsze przywoływana w LIFO (Last-In-First-Out) zamówienie. Za każdym razem, gdy wywoływana jest metoda, w pamięci stosu tworzony jest nowy blok dla metody do przechowywania lokalnych wartości pierwotnych i odwołań do innych obiektów w metodzie.
Po zakończeniu metody blok staje się nieużywany i staje się dostępny dla następnej metody.
Rozmiar pamięci stosu jest znacznie mniejszy w porównaniu z pamięcią sterty.
Kluczowe cechy pamięci stosu
Oprócz tego, o czym rozmawialiśmy do tej pory, poniżej przedstawiono kilka innych funkcji Stos pamięć:
- Rośnie i kurczy się w miarę wywoływania i zwracania nowych metod
- Zmienne wewnątrz stosu istnieją tylko tak długo, jak długo działa metoda, która je utworzyła
- Jego automatycznie przydzielane i zwalniane, gdy metoda kończy wykonywanie
- Jeśli ta pamięć jest pełna, Java zgłasza java.lang.StackOverFlowError
- Dostęp do tej pamięci jest szybki w porównaniu do pamięci sterty
- Ta pamięć jest bezpieczne wątkowo ponieważ każdy wątek działa na swoim własnym stosie
Metody w klasie Stack
- Obiekt push ( Element obiektu ): Umieszcza element na szczycie stosu.
- Obiekt pop (): Usuwa i zwraca górny element stosu. Na „EmptyStackException” wyjątek jest generowany, jeśli wywołasz pop (), gdy stos wywołujący jest pusty.
- Podgląd obiektu (): Zwraca element znajdujący się na szczycie stosu, ale go nie usuwa.
- Boolean pusty (): Zwraca prawdę, jeśli nic nie znajduje się na szczycie stosu. W przeciwnym razie zwraca wartość false.
- wyszukiwanie int ( Element obiektu ): Określa, czy obiekt istnieje w stosie. Jeśli element zostanie znaleziony, zwraca pozycję elementu od góry stosu. W przeciwnym razie zwraca -1.
Kod Java do implementacji stosu
import java.io. * import java.util. * class Test {static void stack_push (stos stosu) {for (int i = 0 i<5 i++){ stack.push(i) } } static void stack_pop(Stack stack){ System.out.println('Pop :') for(int i = 0 i < 5 i++){ Integer y = (Integer) stack.pop() System.out.println(y) } } static void stack_peek(Stack stack){ Integer element = (Integer) stack.peek() System.out.println('Element on stack top : ' + element) } static void stack_search(Stack stack, int element){ Integer pos = (Integer) stack.search(element) if(pos == -1) System.out.println('Element not found') else System.out.println('Element is found at position ' + pos) } public static void main (String[] args){ Stack stack = new Stack() stack_push(stack) stack_pop(stack) stack_push(stack) stack_peek(stack) stack_search(stack, 2) stack_search(stack, 6) } }
//Wynik
java co to jest instancja
Teraz przejdźmy do przestrzeni sterty.
Miejsce na sterty w Javie
Pamięć jest alokowana podczas wykonywania instrukcji napisanych przez programistów. Zauważ, że nazwa sterty nie ma nic wspólnego ze strukturą danych sterty. Nazywa się to stertą, ponieważ jest to stos miejsca w pamięci dostępnego dla programistów asygnowany i cofnąć przydział. Jeśli programista nie obsługuje dobrze tej pamięci, wyciek pamięci możedzieje się w programie.
Kluczowe cechy pamięci sterty Java
- Oprócz tego, co omówiliśmy do tej pory, poniżej przedstawiono inne cechy miejsca na stercie:
- Jest dostępny za pośrednictwem złożonych technik zarządzania pamięcią, które obejmują Młode pokolenie, stare lub Tenured Generation, i Trwała generacja
- Jeśli miejsce na sterty jest pełne, Java zgłasza java.lang.OutOfMemoryError
- Dostęp do tej pamięci jest stosunkowo wolniejszy niż do pamięci stosowej
- Ta pamięć, w przeciwieństwie do stosu, nie jest automatycznie zwalniana. To potrzebuje Śmieciarz aby zwolnić nieużywane obiekty, aby zachować efektywność wykorzystania pamięci
- W przeciwieństwie do stosu sterta nie jest bezpieczne wątkowo i należy go strzec poprzez odpowiednią synchronizację kodu
Różnica między przestrzenią sterty Java a pamięcią stosu
Na podstawie powyższych wyjaśnień możemy łatwo wyciągnąć następujące różnice między Sterta i Stos pamięć.
- Sterta pamięć jest używana przez wszystkie części aplikacji, podczas gdy pamięć stosu jest używana tylko przez jeden wątek wykonania.
- Za każdym razem, gdy tworzony jest obiekt, jest on zawsze przechowywany w obszarze sterty, a pamięć stosu zawiera odniesienie do niego. Pamięć stosu zawiera tylko pliki lokalne zmienne pierwotne i zmienne odniesienia do obiektów w przestrzeni sterty.
- Obiekty przechowywane w stercie są dostępne globalnie, podczas gdy inne wątki nie mają dostępu do pamięci stosu.
- Zarządzanie pamięcią w stosie odbywa się w formacie LIFO sposób, podczas gdy w pamięci Heap jest bardziej złożony, ponieważ jest używany globalnie. Pamięć sterty jest podzielona na Młode pokolenie, stare pokolenie itp., więcej szczegółów w Java Garbage Collection.
- Pamięć stosu to krótkotrwały podczas gdy pamięć sterty trwa od początku do końca wykonania aplikacji.
- Możemy użyć -XMX i -XMS Opcja JVM do definiowania rozmiaru startowego i maksymalnego rozmiaru pamięci sterty. Możemy użyć -XSS aby zdefiniować rozmiar pamięci stosu.
- Gdy pamięć stosu jest pełna, wyrzuca środowisko wykonawcze Java java.lang.StackOverFlowError podczas gdy jeśli pamięć sterty jest pełna, wyrzuca java.lang.OutOfMemoryError: Przestrzeń sterty Javabłąd.
- Rozmiar pamięci stosu jest znacznie mniejszy w porównaniu z pamięcią sterty. Ze względu na prostotę alokacji pamięci (LIFO), pamięć stosu jest bardzo szybka w porównaniu dopamięć sterty.
Wykres porównania
PARAMETR | STOS | STERTA |
Podstawowy | Pamięć jest przydzielana w ciągłym bloku | Pamięć jest przydzielana w kolejności losowej |
Alokacja i cofanie przydziału | Automatycznie przez kompilator | Podręcznik przez programistę |
Koszt | Mniej | Jeszcze |
Realizacja | Ciężko | Łatwo |
Czas dostępu | Szybciej | Wolniej |
Główna kwestia | Brak pamięci | Fragmentacja pamięci |
Lokalność różnicy | Doskonały | Odpowiedni |
Elastyczność | Stała stawka | Zmiana rozmiaru jest możliwa |
Na tym kończymy samouczek „Alokacja pamięci w Javie”. Mam nadzieję, że zrozumieliście koncepcję i jej realizację na podstawie kilku przykładów w czasie rzeczywistym.
Teraz, kiedy zrozumiałeśAlokacja pamięci w Javiepodstawy w tym artykule „Przydział pamięci w Javie” zapoznaj się z autorstwa Edureka, zaufanej firmy zajmującej się edukacją online, z siecią ponad 250 000 zadowolonych uczniów rozsianych po całym świecie. Szkolenia i kursy certyfikacyjne dotyczące Java J2EE i SOA firmy Edureka są przeznaczone dla studentów i profesjonalistów, którzy chcą zostać programistą Java. Kurs ma na celu zapewnienie przewagi w programowaniu w języku Java i przeszkolenie zarówno podstawowych, jak i zaawansowanych koncepcji Java, a także różnych struktur Java, takich jak Hibernate i Wiosna .
Masz do nas pytanie? Wspomnij o tym w sekcji komentarzy na blogu „Przydział pamięci w Javie”, a my skontaktujemy się z Tobą tak szybko, jak to możliwe.