logo

Stack vs Heap Java

Java, atminties valdymas yra gyvybiškai svarbus procesas. Jį „Java“ valdo automatiškai. JVM padalija atmintį į dvi dalis: krūva atmintis ir krūvos atmintis. „Java“ požiūriu, abi yra svarbios atminties sritys, tačiau abi naudojamos skirtingais tikslais. The pagrindinis skirtumas tarp kamino atminties ir krūvos atminties yra tai, kad krūva naudojama metodo vykdymo tvarkai ir vietiniams kintamiesiems saugoti, o krūvos atmintyje saugomi objektai ir naudojamas dinaminis atminties paskirstymas ir atskyrimas. Šiame skyriuje išsamiai aptarsime kamino ir krūvos skirtumus.

Stack vs Heap Java

Stack atmintis

Kamino atmintis yra fizinė erdvė (RAM), skirta kiekvienai gijai vykdymo metu. Jis sukuriamas, kai sukuriamas siūlas. Atminties valdymas rietuvėje vyksta pagal LIFO (Last-In-First-Out) tvarką, nes ji pasiekiama visame pasaulyje. Jame saugomi kintamieji, nuorodos į objektus ir daliniai rezultatai. Atmintis, skirta dėklo gyvavimui, kol funkcija grįš. Jei nėra vietos naujiems objektams kurti, jis išmetajava.lang.StackOverFlowError. Elementų apimtis apsiriboja jų gijomis. The JVM sukuria atskirą krūvą kiekvienai gijai.

Krūvos atmintis

Jis sukuriamas paleidus JVM ir naudojamas programai tol, kol programa veikia. Jame saugomi objektai ir JRE klasės. Kai kuriame objektus, jis užima vietą krūvos atmintyje, o to objekto nuoroda sukuriama krūvoje. Ji nesilaiko jokios tvarkos, kaip kamino. Jis dinamiškai tvarko atminties blokus. Tai reiškia, kad mums nereikia tvarkyti atminties rankiniu būdu. Norėdami automatiškai valdyti atmintį, Java suteikia šiukšlių surinkėjui, kuris ištrina nebenaudojamus objektus. Atmintis, skirta krūvai, gyvuoja tol, kol neįvyksta bet koks įvykis, arba programa nutraukiama, arba laisvos atminties. Elementai programoje pasiekiami visame pasaulyje. Tai bendra atminties erdvė, dalijama su visomis gijomis. Jei krūva yra pilna, ji išmetajava.lang.OutOfMemoryError. Krūvos atmintis dar skirstoma į šias atminties sritis:

  • Jaunoji karta
  • Išgyvenusiųjų erdvė
  • Senoji karta
  • Nuolatinė karta
  • Kodo talpykla

Toliau pateiktame paveikslėlyje parodytas kamino atminties ir krūvos vietos paskirstymas.

Stack vs Heap Java

Skirtumas tarp kamino ir krūvos atminties

Šioje lentelėje apibendrinami visi pagrindiniai kamino atminties ir krūvos vietos skirtumai.

Parametras Stack atmintis Krūvos erdvė
Taikymas Jame saugomi daiktai, kurių tarnavimo laikas labai trumpas, pvz metodai, kintamieji, ir atskaitos kintamieji objektų. Jis saugo objektų ir Java Runtime Environment ( JRE ) klases.
Užsakymas Tai seka LIFO įsakymas. Ji nesilaiko jokios tvarkos, nes tai yra dinaminis atminties paskirstymas ir neturi jokio fiksuoto atminties blokų paskirstymo ir atskyrimo modelio.
Lankstumas tai yra nėra lankstus nes negalime pakeisti skirtos atminties. tai yra lankstus nes galime pakeisti skirtą atmintį.
Efektyvumas Tai turi greičiau prieiga, paskirstymas ir paskirstymas. Tai turi lėčiau prieiga, paskirstymas ir paskirstymas.
Atminties dydis tai yra mažesnis dydžio. tai yra didesnis dydžio.
Naudojamos Java parinktys Galime padidinti krūvos dydį naudodami JVM parinktį -Xss. Mes galime padidinti arba sumažinti krūvos atminties dydį naudodami - Xmx ir -Xms JVM parinktis.
Matomumas arba apimtis Kintamieji matomi tik savininko gijai. Tai matoma visoms temoms.
Kosmoso karta Sukūrus giją, operacinė sistema automatiškai paskirsto krūvą. Norėdami sukurti programos krūvos erdvę, kalba pirmiausia iškviečia operacinę sistemą vykdymo metu.
Paskirstymas Kiekvienam objektui sukuriamas atskiras krūvas. Jis dalijamas tarp visų gijų.
Išimtis Metimai JVM meta java.lang.StackOverFlowError jei krūvos dydis didesnis už ribą. Norėdami išvengti šios klaidos, padidinkite krūvos dydį. JVM meta java.lang.OutOfMemoryError jei JVM negali sukurti naujo vietinio metodo.
Paskirstymas / paskirstymas Tai atlieka automatiškai kompiliatorius . Tai atlieka rankiniu būdu programuotojas .
Kaina Jo kaina yra mažiau . Jo kaina yra daugiau lyginant su kaminu.
Įgyvendinimas Jo įgyvendinimas yra sunku . Jo įgyvendinimas yra lengva .
Paskirstymo tvarka Atminties paskirstymas yra tęstinis . Paskirta atmintis atsitiktinis įsakymas.
Siūlas-Sauga Jis yra saugus siūlams, nes kiekvienas siūlas turi savo krūvą. Jis nėra saugus nuo gijų, todėl reikia tinkamai sinchronizuoti kodą.