Alocarea memoriei în Java: tot ce trebuie să știți în 2022

Publicat: 2021-01-10

Alocarea memoriei în java se referă la procesul prin care programele și serviciile de calculator sunt alocate dedicate spațiilor de memorie virtuală. Mașina virtuală Java împarte memoria în memorie stivă și memorie heap. Pentru Java Virtual Machine, executarea unei aplicații în potențialul maxim se poate întâmpla din memoria stivă și heap. De fiecare dată când este declarată o nouă variabilă sau obiect, memoria alocă memorie dedicată unor astfel de operațiuni.

Cuprins

Stack Memorie

Alocarea memoriei de stoc în java este utilizată pentru memoria statică și execuția firelor. Valorile conținute în această memorie sunt temporare și limitate la metode specifice, deoarece ele continuă să fie menționate în modul Last-In-First-Out.

De îndată ce memoria este apelată și un nou bloc este creat în memoria stivei, memoria stivei păstrează apoi valori și referințe primitive până când metoda durează. După încheierea acestuia, blocul este șters și este disponibil pentru un nou proces. În general, dimensiunea totală a memoriei stivei este nesemnificativă față de cea a memoriei heap.

Învață să construiești aplicații precum Swiggy, Quora, IMDB și multe altele

Caracteristicile memoriei stivei

Pe baza diferitelor secțiuni ale alocării memoriei în Java Virtual Machine (JVM) , iată câteva dintre caracteristicile discrete ale memoriei stivei:

  • Memoria stivei poate crește sau contracta pe măsură ce orice metode noi sunt apelate și returnate în consecință.
  • Orice variabilă din stivă poate rula atâta timp cât domeniul de aplicare al metodei există.
  • Obține auto-alocare și dealocare pe măsură ce o metodă este supusă execuției.
  • În cazul memoriei pline, java.lang.StackOverFlowError se declanșează.
  • Accesul este mai rapid în comparație cu memoria heap.

Citiți: Full-Stack vs. Software Engineer: pe care ar trebui să-l alegeți?

Metode utilizate în alocarea memoriei stivei în java

  • Object push(Object element): Aici, un articol este împins în partea de sus a stivei.
  • Object pop(): Orice element situat în partea de sus a stivei este șters și returnat. În cazul în care o stivă este liberă pe măsură ce pop() este invocat, apare excepția – EmptyStackException.
  • Object peek(): Aici, elementul de sus este returnat, dar nu este supus spălării.
  • Boolean empty(): Dacă bucla nu are nicio valoare superioară în stiva sa, funcția returnează 1 (adevărat), în caz contrar 0 (fals).
  • În căutare (element obiect): Acesta este folosit pentru a înțelege dacă un obiect este prezent în stivă. În cazul în care valoarea este găsită, funcția returnează locația elementului din partea de sus a stivei, în caz contrar returnează -1.

Citiți: Proiecte și subiecte Java pentru începători

Java Heap Space

Utilizat în principal de java runtime, Java Heap Space intră în joc de fiecare dată când un obiect este creat și alocat în el. Funcția discretă, precum Garbage Collection, continuă să elibereze memoria folosită de obiectele anterioare care nu au nicio referință. Pentru un obiect creat în Heap Space poate avea acces gratuit în aplicație.

Alocarea memoriei în java este împărțită în părți, și anume Heap, Stack, Code și Static.

Caracteristicile memoriei Java Heap

  • Accesibil din tehnica complicată de gestionare a memoriei, inclusiv generația tânără, generația veche sau cu mandat și generația permanentă.
  • În memoria heap, când se umple, returnează java.lang.OutOfMemoryError.
  • Accesul în această memorie este comparativ mai lent decât cel al memoriei stivei.
  • Nu suferă dealocare automată și necesită o funcție similară precum Garbage Collector pentru a elimina obiectele străine pentru ca memoria să funcționeze în stadiul optim.

Un exemplu de alocare de memorie stivă și heap în java este:

Sursă

Heap Space și Stack Memory: diferențe fundamentale

Memoria spațiului heap Stack Memorie
Toate părțile aplicației invocă memoria heap. Execuția memoriei stivei este limitată la un singur fir.
Ori de câte ori este creat un obiect, acesta este stocat în spațiul heap. Memoria stivei cuprinde doar variabilele sale de referință și primitive locale.
Obiectele de aici sunt accesibile la nivel global în cadrul aplicației. Alte fire de execuție nu pot accesa obiectele de memorie stiva.
Aici, memoria este definită în funcție de generațiile tinere și bătrâne. Gestionarea memoriei are loc pe baza ultimului intrat, primul ieşit.
Memoria rămâne conform domeniului aplicației. Memoria este temporară.
Metode precum – XMX și XMS JVM sunt utilizate pentru a defini dimensiunea optimă a memoriei heap. Pentru memoria stivă, aceasta este determinată de metoda -XSS.
Aici, excepția java.lang.OutOfMemoryError apare în cazul memoriei pline. Aici apare eroarea java.lang.StackOverFlowError în cazul în care memoria este plină.
Dimensiunea este mai mare, dar procesarea necesită timp în comparație cu memoria stivei. Dimensiunea este mai mică, dar mai rapidă în execuție pentru funcționarea lină LIFO.

Citește și: Salariu pentru dezvoltatori Java în India

Învață cursuri de software online de la cele mai bune universități din lume. Câștigă programe Executive PG, programe avansate de certificat sau programe de master pentru a-ți accelera cariera.

Concluzie

Alocarea memoriei în java are loc în două moduri, în principal, spațiu stivă și heap. Sperăm că v-a ajutat să înțelegeți procesul tuturor.

Dacă sunteți interesat să aflați mai multe despre dezvoltarea de software full-stack, consultați programul Executive PG de la upGrad și IIIT-B în dezvoltarea software full-stack, care este conceput pentru profesioniști care lucrează și oferă peste 500 de ore de formare riguroasă, peste 9 proiecte, și misiuni, statutul de absolvenți IIIT-B, proiecte practice practice și asistență la locul de muncă cu firme de top.

Cum se întâmplă gestionarea memoriei în Java?

Java Virtual Machine (JVM) este un program de calculator folosit pentru a rula programe scrise în limbajul de programare Java. Face procesul de utilizare a managementului memoriei eficient. De asemenea, este conceput pentru a fi robust, astfel încât, chiar dacă există o blocare a sistemului de operare, programul care rulează pe JVM să nu fie afectat. Gestionarea memoriei înseamnă gestionarea fiecărei piese de memorie (RAM) dintr-un sistem informatic. JVM monitorizează alocarea și eliberarea memoriei atunci când este necesar. De îndată ce un program este încărcat în memorie, JVM-ul alocă spațiu de memorie pentru acesta. Acest proces se numește heap. Heap-ul este un spațiu de memorie comun pentru multe părți ale aplicației.

Ce este Garbage Collection în Java?

Java Virtual Machine (JVM) folosește contorizarea referințelor pentru a urmări numărul de obiecte Java. Înainte ca orice obiect să poată fi colectat, numărul de referințe la acest obiect trebuie să ajungă la zero. Programul utilizator poate șterge în mod explicit obiecte apelând metoda finalize(). Finalize este o metodă statică din clasa Object care este apelată de Garbage Collector (GC). Metoda Finalize va elibera toate resursele obiectului înainte ca Garbage Collector să se ocupe de acest obiect. Garbage Collector este procesul de curățare a obiectelor nedorite. Procesul Garbage Collector va fi declanșat atunci când sistemul de rulare Java detectează că heap-ul Java este aproape plin. Fiecare obiect are un bitmap în JVM. Bitmap-ul este setat pentru fiecare obiect pentru a urmări dacă a fost folosit sau nu. Când bitmap-ul este transformat la 0, GC se va ocupa de acest obiect.

Care sunt caracteristicile limbajului de programare Java?

Limbajul de programare Java este un limbaj de programare de nivel înalt de uz general, care este folosit pentru a construi aplicații și applet-uri. Software-ul Java poate rula pe orice platformă care acceptă Java fără a fi reprogramat. Caracteristicile limbajului de programare Java sunt: ​​caracteristici orientate pe obiecte, robuste, de înaltă securitate și independente de platformă, gratuit, ușor de învățat și de utilizat. Java este un limbaj de programare orientat pe obiecte care este independent de platformă și poate fi folosit și pe orice sistem de operare sau platformă. Java este un limbaj compilat și este produs bytecode, care este apoi executat în Java Virtual Machine.