Какво представлява разпределението на паметта в Java? Памет и купчина



Тази статия, базирана на „Разпределение на паметта в Java“, ще ви помогне с подробни познания за разпределението на паметта, заедно със структурите от данни на стека и купчината.

Разпределение на паметта е процес, при който компютърните програми и услуги се назначават с физически или виртуални памет пространство. В тази статия ще научим за разпределението на паметта в и ще обсъдим Stack и Heap Memory.

Какво е паметта на стека?

Паметта на Java стека се използва за изпълнение на нишка. Те съдържат специфични за метода стойности, които са краткотрайни и препратки към други обекти в купчината, която се препраща от метода.





Стек паметта винаги е посочена в LIFO (Last-In-First-Out) поръчка. Всеки път, когато се извика метод, в паметта на стека се създава нов блок, за да може методът да съдържа локални примитивни стойности и препратка към други обекти в метода.

Веднага след като методът приключи, блокът става неизползван и става достъпен за следващия метод.



каква е разликата между hashtable и hashmap

Размерът на стековата памет е много по-малък в сравнение с паметта на купчина.

Основни характеристики на паметта на стека

Освен това, което обсъждахме досега, по-долу са някои други характеристики на Стек памет:

  • Той расте и се свива, когато съответно се извикват и връщат нови методи
  • Променливите в стека съществуват само докато методът, който ги е създал, работи
  • Това е автоматично разпределени и освободени, когато методът завърши изпълнението
  • Ако тази памет е пълна, Java хвърля java.lang.StackOverFlowError
  • Достъпът до тази памет е бърз в сравнение с купчината памет
  • Тази памет е безопасно за конци тъй като всяка нишка работи в свой собствен стек

Методи в клас на стека

  • Натискане на обект ( Обектен елемент ): Избутва елемент в горната част на стека.
  • Поп обект (): Премахва и връща горния елемент на стека. An ‘EmptyStackException’ изключение се хвърля, ако извикаме pop (), когато стекът за извикване е празен.
  • Поглед на обект (): Връща елемента в горната част на стека, но не го премахва.
  • Булево празно (): Връща вярно, ако нищо не е в горната част на стека. В противен случай връща false.
  • int търсене ( Обектен елемент ): Той определя дали даден обект съществува в стека. Ако елементът бъде намерен, той връща позицията на елемента от горната част на стека. В противен случай връща -1.

Java код за изпълнение на стека

import java.io. * import java.util. * Тест на класа {static void stack_push (Stack stack) {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) } } 

// Изход



memory-allocation-in-java

Сега, нека се преместим в Heap Space.

Куп пространство в Java

Паметта се разпределя по време на изпълнение на инструкции, написани от програмисти. Обърнете внимание, че купчината име няма нищо общо със структурата на данните на купчината. Нарича се купчина, защото представлява купчина памет, достъпна за програмистите разпределени и де-разпределение. Ако програмист не се справи добре с тази памет, може да изтече паметсе случват в програмата.

Основни характеристики на Java Heap Memory

  • Освен това, което дискутирахме досега, следва някои други характеристики на купчината пространство:
  • Достъпът е чрез сложни техники за управление на паметта, които включват Младо поколение, старо или Поколено поколение, и Постоянно поколение
  • Ако куп място е запълнено, Java хвърля java.lang.OutOfMemoryError
  • Достъпът до тази памет е относително по-бавен от паметта на стека
  • Тази памет, за разлика от стека, не се освобождава автоматично. Има нужда Събирач на боклук да освободите неизползвани обекти, за да запазите ефективността на използването на паметта
  • За разлика от стека, куп не е безопасно за конци и трябва да се пази чрез правилно синхронизиране на кода

Разлика между Java Heap Space и Stack Memory

Въз основа на горните обяснения можем лесно да заключим следните разлики между Куп и Стек памет.

  • Куп паметта се използва от всички части на приложението, докато стековата памет се използва само от една нишка на изпълнение.
  • Винаги, когато се създава обект, той винаги се съхранява в пространството Heap и паметта на стека съдържа препратката към него. Паметта на стека съдържа само локални примитивни променливи и референтни променливи към обекти в куп пространство.
  • Обектите, съхранявани в купчината, са глобално достъпни, докато паметта на стека не може да бъде достъпна от други нишки.
  • Управлението на паметта в стека се извършва в a LIFO начин, докато е по-сложен в паметта на купчината, защото се използва глобално. Купчината памет е разделена на Младо поколение, старо поколение и т.н., повече подробности в Java Garbage Collection.
  • Паметта на стека е краткотраен като има предвид, че куп паметта живее от началото до края на изпълнението на приложението.
  • Можем да използваме -XMX и -XMS JVM опция за определяне на стартовия размер и максималния размер на куп памет. Можем да използваме -XSS за да определите размера на стека памет.
  • Когато паметта на стека е пълна, Java runtime хвърля java.lang.StackOverFlowError докато ако паметта на купчината е пълна, тя изхвърля java.lang.OutOfMemoryError: Java Heap Spaceгрешка.
  • Размерът на стековата памет е много по-малък в сравнение с Heap паметта. Поради простотата в разпределението на паметта (LIFO), паметта на стека е много бърза в сравнение скуп памет.

Таблица за сравнение

ПАРАМЕТЪР СТОП ТОПЛА
Основен Паметта се разпределя в непрекъснат блокПаметта се разпределя в произволен ред
Разпределение и преразпределение Автоматично от компилаторРъководство от програмист
Разходи По-малко| Повече ▼
Изпълнение ТрудноЛесно
Време за достъп По-бързоПо-бавно
Основен въпрос Недостиг на паметФрагментация на паметта
Локалност на разликата ОтличноАдекватно
Гъвкавост Фиксирана лихваПреоразмеряването е възможно

С това стигнахме до края на този урок „Разпределение на паметта в Java“. Надявам се, че сте разбрали концепцията и нейното изпълнение чрез някои примери в реално време.

Сега, след като разбрахтеРазпределение на паметта в Javaчрез тази статия „Разпределение на памет в Java“ разгледайте от Edureka, доверена компания за онлайн обучение с мрежа от над 250 000 доволни учащи, разпространени по целия свят. Курсовете за обучение и сертифициране на Java J2EE и SOA на Edureka са предназначени за студенти и професионалисти, които искат да бъдат Java Developer. Курсът е предназначен да ви даде начален старт в програмирането на Java и да ви обучи както за основни, така и за разширени Java концепции, заедно с различни Java рамки като Hibernate & Пролет .

Имате въпрос към нас? Споменете го в раздела за коментари в този блог „Разпределение на памет в Java“ и ние ще се свържем с вас възможно най-скоро.