Шта је додељивање меморије у Јави? Меморија стека и гомиле



Овај чланак заснован на „Алокацији меморије у Јави“ помоћи ће вам са детаљним знањем о алокацији меморије заједно са Стацк и Хеап структурама података.

Додела меморије је процес којим се рачунарским програмима и услугама додељују физички или виртуелни меморија свемир. У овом чланку ћемо научити о расподели меморије у и разговараћемо о меморији стека и гомиле.

Шта је меморија стека?

Јава Стацк меморија се користи за извршавање нити. Садрже краткотрајне вредности специфичне за методу и референце на друге објекте у гомили која се упућује из методе.





Гомила меморија се увек позива на ЛИФО (Последњи улазак-први-излаз) ред. Кад год се метода позове, у меморији стека креира се нови блок да би метода задржала локалне примитивне вредности и референцу на друге објекте у методи.

Чим се метода заврши, блок постаје неискоришћен и постаје доступан за следећи метод.



јавасцрипт добије дужину низа

Величина стека меморије је веома мања у поређењу са Хеап меморијом.

Кључне карактеристике меморије стека

Осим онога о чему смо до сада разговарали, у наставку су наведене и неке друге карактеристике Гомила меморија:

  • Она расте и смањује се како се позивају и враћају нове методе
  • Променљиве унутар стека постоје само док је покренут метод који их је креирао
  • Његово аутоматски алоциран и ослобођен када метода заврши извршење
  • Ако је ова меморија пуна, Јава баца јава.ланг.СтацкОверФловЕррор
  • Приступ овој меморији је брзо у поређењу са меморијом гомиле
  • Ово сећање је потокобезопасними како свака нит ради у свом стеку

Методе у класи Стацк

  • Притисак објекта ( Елемент објекта ): Притисне елемент на врх стека.
  • Објецт поп (): Уклања и враћа горњи елемент стека. Ан ‘ЕмптиСтацкЕкцептион’ изузетак се избацује ако позивамо поп () када је стек позивања празан.
  • Поглед објекта (): Враћа елемент на врху стека, али га не уклања.
  • Боолеан емпти (): Враћа се тачно ако ништа није на врху стека. Иначе, враћа лажно.
  • инт сеарцх ( Елемент објекта ): Одређује да ли објект постоји у стеку. Ако је елемент пронађен, враћа положај елемента са врха стека. У супротном, враћа -1.

Јава код за имплементацију стека

импорт јава.ио. * импорт јава.утил. * Тест класе {статиц воид стацк_пусх (стацк стацк) {фор (инт и = 0 и<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

Сада, кренимо у Хеап Спаце.

Простор гомиле у Јави

Меморија се додељује током извршавања упутстава које су написали програмери. Имајте на уму да гомила имена нема никакве везе са структуром података гомиле. Зове се гомила, јер је гомила меморијског простора на располагању програмерима Издвојено и одвојити. Ако програмер не ради добро са овом меморијом, може доћи до цурења мемориједешавају се у програму.

Кључне карактеристике Јава Хеап меморије

  • Поред онога што смо до сада разговарали, следеће су још неке карактеристике простора гомиле:
  • Приступ му је путем сложених техника управљања меморијом које укључују Млада генерација, стара или Тенуред Генератион, и Трајна генерација
  • Ако је простор гомиле пун, Јава баца јава.ланг.ОутОфМемориЕррор
  • Приступ овој меморији је релативно спорији од стек меморије
  • Ова меморија се, за разлику од стека, не ослобађа аутоматски. Треба Ђубретар да се ослободе неискоришћени објекти како би се одржала ефикасност коришћења меморије
  • За разлику од гомиле, гомила није потокобезопасними и треба га чувати правилном синхронизацијом кода

Разлика између Јава Хеап простора и меморије стека

На основу горњих објашњења можемо лако закључити следеће разлике између Гомила и Гомила меморија.

  • Гомила меморију користе сви делови апликације док стек меморију користи само једна нит извршења.
  • Кад год се објекат креира, увек се чува у простору гомиле и меморија стека садржи референцу на њега. Меморија стека садржи само локалне примитивне променљиве и референтне променљиве објектима у простору гомиле.
  • Објекти ускладиштени у гомили су глобално доступни, док меморији стека не могу приступити друге нити.
  • Управљање меморијом у стеку врши се у а ЛИФО начин док је у Хеап меморији сложенији јер се користи глобално. Меморија гомиле се дели на Млада генерација, Стара генерација итд., више детаља у Јава Гарбаге Цоллецтион.
  • Меморија стека је краткотрајна док гомила меморије живи од почетка до краја извршења апликације.
  • Можемо да користимо -КСМКС и -КСМС ЈВМ опција за дефинисање величине покретања и максималне величине меморије гомиле. Можемо да користимо -КССС да бисте дефинисали величину стека меморије.
  • Када је меморија стека пуна, Јава рунтиме баца јава.ланг.СтацкОверФловЕррор док је меморија хрпе пуна, баца јава.ланг.ОутОфМемориЕррор: Јава гомила просторгрешка.
  • Величина стека меморије је врло мања у поређењу са меморијском меморијом. Због једноставности у додељивању меморије (ЛИФО), меморија стека је врло брза у поређењу сагомила меморије.

Табела поређења

ПАРАМЕТАР ГОМИЛА ГОМИЛА
Басиц Меморија се додељује у суседни блокМеморија се додељује случајним редоследом
Додјела и прерасподјела Аутоматски компајлерПриручник програмера
Трошак МањеВише
Имплементација ТешкоЛако
Време приступа БржеСпорији
Главни проблем Недостатак меморијеФрагментација меморије
Локалитет разлике ОдлицноАдекватан
Флексибилност Фиксна каматна стопаМогућа је промена величине

Овим смо дошли до краја овог водича „Додељивање меморије у Јави“. Надам се да сте схватили концепт и његову примену кроз неке примере у стварном времену.

Сад кад сте разумелиДодељивање меморије у Јавиоснове кроз овај чланак „Додељивање меморије у Јави“ погледајте Едурека, поуздана компанија за учење на мрежи са мрежом од више од 250 000 задовољних ученика раширених широм света. Едурекини курсеви за обуку и сертификацију Јава Ј2ЕЕ и СОА дизајнирани су за студенте и професионалце који желе да буду Јава програмери. Курс је дизајниран да вам пружи почетну предност у Јава програмирању и да вас оспособи за основне и напредне Јава концепте, заједно са разним Јава оквирима попут Хибернате & Пролеће .

Имате питање за нас? Спомените то у одељку за коментаре овог блога „Додељивање меморије на Јави“ и јавићемо вам се што је пре могуће.