Kas ir atmiņas piešķiršana Java? Steka un kaudzes atmiņa



Šis raksts, kura pamatā ir “Atmiņas piešķiršana Java”, palīdzēs jums iegūt detalizētas zināšanas par atmiņas sadali kopā ar Stack and Heap datu struktūrām.

Atmiņas piešķiršana ir process, kurā datorprogrammas un pakalpojumi tiek piešķirti fiziskam vai virtuālam atmiņa telpa. Šajā rakstā mēs uzzināsim par atmiņas piešķiršanu un mēs apspriedīsim kaudzes un kaudzes atmiņu.

Kas ir kaudzes atmiņa?

Java Stack atmiņa tiek izmantota pavediena izpildei. Tie satur metodei raksturīgas vērtības, kas ir īslaicīgas, un atsauces uz citiem kaudzes objektiem, uz kuriem atsaucas no metodes.





Kaudze atmiņa vienmēr ir atsauce uz LIFO (Last-in-first-out) rīkojumu. Ikreiz, kad tiek izsaukta metode, kaudzes atmiņā tiek izveidots jauns bloks, lai metode saglabātu vietējās primitīvās vērtības un atsauci uz citiem metodes objektiem.

Tiklīdz metode beidzas, bloks kļūst neizmantots un kļūst pieejams nākamajai metodei.



Steka atmiņas lielums ir ļoti mazāks, salīdzinot ar kaudzes atmiņu.

Kaudzes atmiņas galvenās iezīmes

Papildus tam, ko mēs esam apsprieduši līdz šim, ir dažas citas iezīmes Kaudze atmiņa:

  • Tas aug un samazinās, jo tiek sauktas un attiecīgi atgrieztas jaunas metodes
  • Mainīgie kaudzes iekšienē pastāv tikai tik ilgi, kamēr darbojas metode, kas tos izveidoja
  • Tā ir automātiski piešķirts un sadalīts, kad metode beidz izpildi
  • Ja šī atmiņa ir pilna, Java iemet java.lang.StackOverFlowError
  • Piekļuve šai atmiņai ir ātri salīdzinot ar kaudzes atmiņu
  • Šī atmiņa ir drošs ar diegu jo katrs pavediens darbojas savā kaudzītē

Metodes kaudzes klasē

  • Objekta virzīšana ( Objekta elements ): Stumj elementu kaudzes augšpusē.
  • Objekta pop (): Noņem un atdod kaudzes augšējo elementu. An ‘EmptyStackException’ izņēmums tiek izmests, ja mēs izsaucam pop (), kad izsaucošā kaudze ir tukša.
  • Objekta palūrēšana (): Atgriež elementu kaudzes augšdaļā, taču to nenoņem.
  • Būla tukša (): Tas atgriežas kā patiess, ja kaudzes augšpusē nav nekā. Citādi atgriež false.
  • int meklēšana ( Objekta elements ): Tas nosaka, vai kaudzē ir objekts. Ja elements ir atrasts, tas atgriež elementa pozīciju no kaudzes augšdaļas. Citādi tas atgriež -1.

Java kods kaudzes ieviešanai

importēt java.io. * importēt java.util. * klases pārbaude {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) } } 

// Izeja



memory-allocation-in-java

Ļaujiet mums pāriet uz kaudzes vietu.

Kaudzes telpa Java

Atmiņa tiek piešķirta, izpildot programmētāju uzrakstītās instrukcijas. Ņemiet vērā, ka nosaukuma kaudzei nav nekāda sakara ar kaudzes datu struktūru. To sauc par kaudzi, jo tā ir atmiņas vietas kaudze, kas pieejama programmētājiem piešķirts un de-piešķirt. Ja programmētājs labi neapstrādā šo atmiņu, atmiņas noplūde varnotiek programmā.

Java kaudzes atmiņas galvenās iezīmes

  • Papildus tam, ko mēs esam apsprieduši līdz šim, ir dažas citas kaudzes vietas iezīmes:
  • Tam var piekļūt, izmantojot sarežģītas atmiņas pārvaldības metodes Jaunā paaudze, vecā vai Tenured paaudze, un Pastāvīgā paaudze
  • Ja kaudzes vieta ir pilna, Java iemet java.lang.OutOfMemoryError
  • Piekļuve šai atmiņai ir salīdzinoši lēnāka nekā kaudzes atmiņa
  • Atšķirībā no kaudzes šī atmiņa netiek automātiski sadalīta. Tam vajag Atkritumu savācējs atbrīvot neizmantotus objektus, lai saglabātu atmiņas izmantošanas efektivitāti
  • Atšķirībā no kaudzes kaudze nav drošs ar diegu un tas ir jāsargā, pareizi sinhronizējot kodu

Atšķirība starp Java kaudzes vietu un kaudzes atmiņu

Pamatojoties uz iepriekš minētajiem paskaidrojumiem, mēs varam viegli secināt šādas atšķirības starp Kaudze un Kaudze atmiņa.

  • Kaudze atmiņu izmanto visas lietojumprogrammas daļas, bet kaudzes atmiņu izmanto tikai viena izpildes pavediens.
  • Ikreiz, kad tiek izveidots objekts, tas vienmēr tiek glabāts kaudzes telpā, un kaudzes atmiņā ir atsauce uz to. Steka atmiņā ir tikai vietējie primitīvie mainīgie un atsauces mainīgie objektiem kaudzes telpā.
  • Kaudzē saglabātie objekti ir globāli pieejami, turpretim kaudzes atmiņai nevar piekļūt ar citiem pavedieniem.
  • Atmiņas pārvaldība kaudzē tiek veikta a LIFO tā kā tas ir sarežģītāk kaudzes atmiņā, jo tiek izmantots visā pasaulē. Kaudzes atmiņa ir sadalīta Jaunā paaudze, Vecā paaudze utt., sīkāka informācija Java atkritumu kolekcijā.
  • Steka atmiņa ir īslaicīgs tā kā kaudzes atmiņa dzīvo no pieteikuma izpildes sākuma līdz beigām.
  • Mēs varam izmantot -XMX un -XMS JVM iespēja noteikt kaudzes atmiņas starta lielumu un maksimālo lielumu. Mēs varam izmantot -XSS lai definētu kaudzes atmiņas lielumu.
  • Kad kaudze atmiņa ir pilna, Java izpildlaika izmet java.lang.StackOverFlowError turpretī, ja kaudzes atmiņa ir pilna, tā metas java.lang.OutOfMemoryError: Java kaudzes telpakļūda.
  • Steka atmiņas lielums ir ļoti mazāks, salīdzinot ar kaudzes atmiņu. Atmiņas piešķiršanas vienkāršības dēļ (LIFO), kaudzes atmiņa ir ļoti ātra, salīdzinot arkaudzes atmiņa.

Salīdzināšanas diagramma

PARAMETRS KAUDZE MĒRĶIS
Pamata Atmiņa tiek piešķirta blakus esošajā blokāAtmiņa tiek iedalīta nejaušā secībā
Piešķiršana un izplatīšana Automātiski, izmantojot kompilatoruProgrammētāja rokasgrāmata
Izmaksas MazākVairāk
Īstenošana GrūtiViegli
Piekļuves laiks ĀtrākLēnāk
Galvenais jautājums Atmiņas trūkumsAtmiņas sadrumstalotība
Atšķirības lokalizācija IzciliAdekvāti
Elastīgums Fiksēta likmeIr iespējams mainīt izmērus

Ar to mēs esam pabeiguši šo apmācību “Atmiņas piešķiršana Java”. Es ceru, ka esat sapratis koncepciju un tās ieviešanu, izmantojot dažus reāllaika piemērus.

Tagad, kad esat sapratisAtmiņas piešķiršana Javapamati, izmantojot šo rakstu “Atmiņas piešķiršana Java”, pārbaudiet Autors: Edureka, uzticams tiešsaistes mācību uzņēmums ar vairāk nekā 250 000 apmierinātu izglītojamo tīklu visā pasaulē. Edureka Java J2EE un SOA apmācības un sertifikācijas kursi ir paredzēti studentiem un profesionāļiem, kuri vēlas būt Java izstrādātāji. Kurss ir paredzēts, lai dotu jums iespēju sākt Java programmēšanu un apmācīt gan pamata, gan uzlabotas Java koncepcijas, kā arī dažādas Java struktūras, piemēram, hibernēt un Pavasaris .

Vai mums ir jautājums? Pieminiet to šī emuāra “Atmiņas piešķiršana Java” komentāru sadaļā, un mēs pēc iespējas ātrāk sazināsimies ar jums.

kā izmantot vizuālo studiju