Kas yra „Java“ atminties paskirstymas? „Stack and Heap“ atmintis



Šis straipsnis, pagrįstas „Atminties paskirstymu„ Java “, padės jums gauti išsamių žinių apie atminties paskirstymą, taip pat„ Stack and Heap “duomenų struktūras.

Atminties paskirstymas yra procesas, kurio metu kompiuterinės programos ir paslaugos priskiriamos fiziniam ar virtualiam atmintis vietos. Šiame straipsnyje mes sužinosime apie atminties paskirstymą ir aptarsime „Stack and Heap Memory“.

Kas yra „Stack Memory“?

„Java Stack“ atmintis naudojama vykdant giją. Jose yra metodo specifinės vertės, kurios yra trumpalaikės, ir nuorodos į kitus kaupo objektus, į kuriuos kreipiamasi pagal metodą.





kaip įdiegti php "Windows 10"

Sukrauti atmintyje visada nurodoma LIFO (paskutinis-pirmas-išeinantis) įsakymas. Kai tik yra iškviečiamas metodas, kamino atmintyje sukuriamas naujas blokas, skirtas metodo vietinėms primityvioms reikšmėms ir nuorodoms į kitus metodo objektus laikyti.

Kai tik baigiasi metodas, blokas tampa nenaudojamas ir tampa prieinamas kitam metodui.



Krūvos atminties dydis yra labai mažesnis, palyginti su kaupo atmintimi.

Pagrindinės atminties savybės

Be to, ką aptarėme iki šiol, yra keletas kitų bruožų Sukrauti atmintis:

  • Jis auga ir mažėja, kai nauji metodai yra atitinkamai vadinami ir grąžinami
  • Kintamieji kamino viduje egzistuoja tik tol, kol veikia juos sukūręs metodas
  • Tai yra automatiškai paskirstoma ir paskirstoma, kai metodas baigia vykdyti
  • Jei ši atmintis pilna, „Java“ išmeta java.lang.StackOverFlowError
  • Prieiga prie šios atminties yra greitai palyginti su kaupo atmintimi
  • Ši atmintis yra siūlai saugūs nes kiekvienas siūlas veikia savo rietuvėje

Metodai „Stack“ klasėje

  • Objekto stūmimas ( Objekto elementas ): Stumia elementą kamino viršuje.
  • Object pop (): Pašalina ir grąžina viršutinį kamino elementą. An „EmptyStackException“ išimtis išmetama, jei iškviečiame pop (), kai iškviečiamas kaminas yra tuščias.
  • Objekto žvilgsnis (): Grąžina elementą kamino viršuje, bet jo nepašalina.
  • Loginė reikšmė tuščia (): Tai grąžinama tiesa, jei kamino viršuje nėra nieko. Kita, grąžina klaidingą.
  • int paieška ( Objekto elementas ): Jis nustato, ar rietuve yra objektas. Jei elementas randamas, jis grąžina elemento padėtį iš rietuvės viršaus. Kita vertus, ji grąžina -1.

„Java“ kodas kamino diegimui

importuoti java.io. * importuoti java.util. * klasės testą {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) } } 

// Rezultatas



kas yra „blockchain“ kūrėjas

memory-allocation-in-java

Dabar persikelkime į „Heap Space“.

„Java“ kaupas

Atmintis paskirstoma vykdant programuotojų parašytas instrukcijas. Atkreipkite dėmesį, kad pavadinimas krūva neturi nieko bendro su kaupo duomenų struktūra. Tai vadinama kaupu, nes tai yra atminties krūva, prieinama programuotojams skiriama ir de-paskirstyti. Jei programuotojas blogai tvarko šią atmintį, gali atsirasti atminties nutekėjimasatsitikti programoje.

Pagrindinės „Java Heap“ atminties ypatybės

  • Be to, ką mes aptarėme iki šiol, yra keletas kitų krūvos erdvės bruožų:
  • Tai pasiekiama naudojant sudėtingus atminties valdymo metodus, kurie apima Jauna karta, sena arba „Tenured Generation“, ir Nuolatinė karta
  • Jei krūvos vietos pilna, „Java“ meta java.lang.OutOfMemoryError
  • Prieiga prie šios atminties yra palyginti lėtesnė nei kaupiant atmintį
  • Ši atmintis, priešingai nei kamino, nėra automatiškai paskirstoma. Reikia Šiukšlių surinkėjas atlaisvinti nenaudojamus objektus, kad būtų išlaikytas efektyvus atminties naudojimas
  • Skirtingai nuo kamino, krūva nėra siūlai saugūs ir jį reikia saugoti tinkamai sinchronizuojant kodą

Skirtumas tarp „Java Heap Space“ ir „Stack Memory“

Remdamiesi aukščiau pateiktais paaiškinimais, galime lengvai padaryti šiuos skirtumus Krūva ir Sukrauti atmintis.

  • Krūva atmintį naudoja visos programos dalys, o kamino atmintį naudoja tik viena vykdymo gija.
  • Kai objektas kuriamas, jis visada saugomas kaupo erdvėje, o kamino atmintyje yra nuoroda į jį. Kamino atmintyje yra tik vietiniai primityvieji kintamieji ir pamatiniai kintamieji į daiktus krūvos erdvėje.
  • Krūve saugomi objektai yra prieinami visame pasaulyje, o kamino atminties negalima pasiekti kitomis gijomis.
  • Atminties valdymas rietuvėje atliekamas a LIFO „Heap“ atmintyje yra sudėtingesnis, nes naudojamas visame pasaulyje. Krūvos atmintis skirstoma į Jaunoji karta, senoji karta ir tt, daugiau informacijos rasite „Java“ šiukšlių kolekcijoje.
  • „Stack memory“ yra trumpalaikis kadangi krūvos atmintis gyvuoja nuo pat programos vykdymo pradžios iki pabaigos.
  • Mes galime naudoti -XMX ir -XMS JVM galimybė apibrėžti kaupimo atminties paleidimo dydį ir maksimalų dydį. Mes galime naudoti -XSS nustatyti šūsnies atminties dydį.
  • Kai kaupo atmintis pilna, „Java“ vykdymo laikas išmeta java.lang.StackOverFlowError o jei kupina atmintis pilna, ji meta java.lang.OutOfMemoryError: „Java Heap Space“klaida.
  • Krūvos atminties dydis yra labai mažesnis, palyginti su kaupo atmintimi. Dėl paprasto atminties paskirstymo (LIFO), kamino atmintis yra labai greita, palyginti sukrūvos atmintis.

Palyginimo diagrama

PARAMETRAS ŠUOLA ŠILUMAS
Pagrindinis Atmintis skiriama gretimame blokeAtmintis paskirstoma atsitiktine tvarka
Paskirstymas ir paskirstymas Automatinis pagal kompiliatoriųProgramuotojo vadovas
Kaina MažiauDaugiau
Įgyvendinimas SunkuLengva
Prieigos laikas GreičiauLėčiau
Pagrindinis klausimas Trūksta atmintiesAtminties suskaidymas
Skirtumo vieta PuikuTinkamas
Lankstumas Fiksuoto tarifoGalimas dydžio keitimas

Tuo mes baigėme šią „Atminties paskirstymo„ Java “pamoką. Tikiuosi, kad supratote koncepciją ir jos įgyvendinimą pateikdami keletą realaus laiko pavyzdžių.

Dabar, kai suprataiAtminties paskirstymas „Java“pagrindai šiame straipsnyje „Atminties paskirstymas„ Java ““ sukūrė „Edureka“ - patikima internetinė mokymosi įmonė, turinti daugiau nei 250 000 patenkintų besimokančiųjų tinklą. „Edureka“ „Java J2EE“ ir SOA mokymo ir sertifikavimo kursai skirti studentams ir specialistams, norintiems būti „Java“ kūrėjais. Kursas sukurtas tam, kad galėtumėte pradėti žvalgytis į „Java“ programavimą ir išmokyti pagrindines ir pažangias „Java“ koncepcijas kartu su įvairiomis „Java“ sistemomis, tokiomis kaip „Hibernate“ ir Pavasaris .

Turite mums klausimą? Paminėkite tai šio tinklaraščio „Atminties paskirstymas„ Java “komentarų skiltyje ir mes kuo greičiau susisieksime su jumis.