logo

Стек срещу купчина Java

В Java, управление на паметта е жизненоважен процес. Управлява се автоматично от Java. JVM разделя паметта на две части: стек памет и куп памет. От гледна точка на Java и двете са важни области на паметта, но и двете се използват за различни цели. The основна разлика между Stack памет и heap памет е, че стекът се използва за съхраняване на реда на изпълнение на метода и локалните променливи, докато хийп паметта съхранява обектите и използва динамично разпределение и освобождаване на памет. В този раздел ще обсъдим подробно разликите между стека и купчината.

Стек срещу купчина Java

Стекова памет

Паметта на стека е физическо пространство (в RAM), разпределено за всяка нишка по време на изпълнение. Създава се при създаване на нишка. Управлението на паметта в стека следва реда LIFO (последен влязъл-първи излязъл), тъй като е достъпен глобално. Той съхранява променливите, препратките към обекти и частичните резултати. Памет, разпределена за подреждане на животи, докато функцията се върне. Ако няма място за създаване на нови обекти, той изхвърляjava.lang.StackOverFlowError. Обхватът на елементите е ограничен до техните нишки. The JVM създава отделен стек за всяка нишка.

Heap памет

Създава се при стартиране на JVM и се използва от приложението, докато то работи. Той съхранява обекти и JRE класове. Всеки път, когато създаваме обекти, те заемат място в паметта на стека, докато референцията на този обект създава в стека. Той не следва никакъв ред като стека. Той динамично обработва блоковете памет. Това означава, че не трябва да боравим с паметта ръчно. За автоматично управление на паметта, Java осигурява събирач на отпадъци, който изтрива обектите, които вече не се използват. Паметта, разпределена за купчина, живее, докато не настъпи нито едно събитие, било то прекратена програма или свободна памет. Елементите са глобално достъпни в приложението. Това е общо пространство в паметта, споделено с всички нишки. Ако пространството на купчината е пълно, той хвърляjava.lang.OutOfMemoryError. Дипломната памет е допълнително разделена на следните области на паметта:

  • Младо поколение
  • Пространство за оцелели
  • Старо поколение
  • Постоянно поколение
  • Кеш код

Следното изображение показва разпределението на стековата памет и купчината.

Стек срещу купчина Java

Разлика между стекова и купчина памет

Следващата таблица обобщава всички основни разлики между стековата памет и купчината.

Параметър Стекова памет Хийп пространство
Приложение Той съхранява предмети, които имат много кратък живот, като напр методи, променливи, и референтни променливи на обектите. Съхранява обекти и Java Runtime Environment ( JRE ) класове.
Поръчване Следва LIFO поръчка. Той не следва никакъв ред, защото е динамично разпределение на паметта и няма фиксиран модел за разпределяне и освобождаване на блокове памет.
Гъвкавост то е не е гъвкав защото не можем да променим разпределената памет. то е гъвкав защото можем да променим разпределената памет.
Ефективност То има по-бързо достъп, разпределение и освобождаване. То има по-бавно достъп, разпределение и освобождаване.
Размер на паметта то е по-малък в размер. то е по-голям в размер.
Използвани опции на Java Можем да увеличим размера на стека, като използваме JVM опцията -Xss. Можем да увеличим или намалим размера на хийп паметта, като използваме опциите - Xmx и -Xms JVM.
Видимост или обхват Променливите са видими само за нишката собственик. Вижда се за всички нишки.
Генериране на космоса Когато се създаде нишка, операционната система автоматично разпределя стека. За да създаде пространството за купчина за приложението, езикът първо извиква операционната система по време на изпълнение.
Разпределение За всеки обект се създава отделен стек. Той се споделя между всички нишки.
Изключение Хвърляния JVM хвърля java.lang.StackOverFlowError ако размерът на стека е по-голям от ограничението. За да избегнете тази грешка, увеличете размера на стека. JVM хвърля java.lang.OutOfMemoryError ако JVM не може да създаде нов собствен метод.
Разпределение/Отделяне Извършва се автоматично от компилатор . Извършва се ръчно от програмист .
цена Цената му е по-малко . Цената му е Повече ▼ в сравнение със стека.
Внедряване Изпълнението му е твърд . Изпълнението му е лесно .
Ред на разпределение Разпределението на паметта е непрекъснато . Разпределена памет в случаен поръчка.
Безопасност на резбите Той е безопасен за нишки, защото всяка нишка има свой собствен стек. Не е безопасен за нишки, така че е необходима правилна синхронизация на кода.