Mi a memória allokáció a Java-ban? Verem és kupac memória



Ez a cikk, amely a „Memóriaallokáció Java-on” alapul, részletes ismeretekkel szolgál a memória elosztásáról, valamint a Stack és Heap adatstruktúrákról.

Memóriafoglalás olyan folyamat, amelynek során a számítógépes programokat és szolgáltatásokat fizikai vagy virtuális hozzárendeléssel látják el memória hely. Ebben a cikkben megismerjük a memória kiosztását és megbeszéljük a Verem és a kupac memóriát.

Mi a verem memória?

A Java Stack memória egy szál végrehajtására szolgál. Tartalmaznak rövid élettartamú metódusspecifikus értékeket és hivatkozásokat a kupac más objektumaira, amelyekre a módszerből hivatkozni szoktak.





Kazal a memóriára mindig hivatkozunk LIFO (Last-in-First-Out) rendelés. Amikor egy metódust meghívunk, egy új blokk jön létre a verem memóriájában a metódus számára, hogy megtartsa a helyi primitív értékeket és utaljon a metódus többi objektumára.

Amint a módszer véget ér, a blokk használatlanná válik, és elérhetővé válik a következő módszer számára.



split függvény java példában

A verem memória mérete nagyon alacsony a halom memóriához képest.

A verem memória főbb jellemzői

Az eddigieken kívül az alábbiakban bemutatunk néhány további jellemzőt Kazal memória:

  • Növekszik és zsugorodik, ahogy új módszereket hívnak és viszonoznak
  • A veremben lévő változók csak addig léteznek, amíg az őket létrehozó módszer fut
  • Ez van automatikusan kiosztva és elosztva, amikor a módszer befejezi a végrehajtást
  • Ha ez a memória megtelt, a Java dob java.lang.StackOverFlowError
  • Ehhez a memóriához hozzáférés van gyors a halom memóriához képest
  • Ez az emlék szálbiztos mivel minden szál a saját veremében működik

Módszerek a Stack osztályban

  • Object push ( Objektum elem ): Egy elemet tol a verem tetejére.
  • Objektum pop (): Eltávolítja és visszaadja a verem legfelső elemét. An ‘EmptyStackException’ Kivételt dobunk, ha a pop () -t hívjuk meg, amikor a meghívó verem üres.
  • Objektum pillantása (): Visszaadja az elemet a verem tetején, de nem távolítja el.
  • Logikai érték üres (): Visszaáll igaznak, ha semmi nincs a verem tetején. Egyébként hamis értéket ad vissza.
  • int keresés ( Objektum elem ): Meghatározza, hogy létezik-e objektum a veremben. Ha az elem megtalálható, akkor a verem tetejéről adja vissza az elem helyzetét. Egyébként -1-et ad vissza.

Java kód a verem megvalósításához

import java.io. * import java.util. * class Test {static void stack_push (Verem verem) {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) } } 

//Kimenet



memory-allocation-in-java

Most menjünk át a Haloműrbe.

Halomtér Java-ban

A memória a programozók által írt utasítások végrehajtása során kerül kiosztásra. Vegye figyelembe, hogy a halom névnek semmi köze a kupac adatszerkezetéhez. Halomnak hívják, mert egy halom memóriaterület áll a programozók rendelkezésére kiosztva és kiosztás megszüntetése. Ha egy programozó nem kezeli megfelelően ezt a memóriát, akkor memóriaszivárgás lehettörténjen a programban.

A Java halom memória főbb jellemzői

  • Az eddig tárgyaltakon kívül a halomtér néhány további jellemzője:
  • Komplex memóriakezelési technikákkal érhető el, amelyek magukban foglalják Fiatal Nemzedék, Öreg vagy Tenured Generation, és Állandó Generáció
  • Ha a kupacterület megtelt, a Java dob java.lang.OutOfMemoryError
  • Ehhez a memóriához viszonylag lassabban lehet hozzáférni, mint a verem memóriához
  • A memóriával ellentétben ez a memória nem kerül automatikusan elosztásra. Szüksége van rá Szemetes a fel nem használt objektumok felszabadítása a memóriahasználat hatékonyságának megőrzése érdekében
  • A veremtől eltérően a kupac nem az szálbiztos és a kód megfelelő szinkronizálásával kell védeni

Különbség a Java Heap Space és a Stack Memory között

A fenti magyarázatok alapján könnyen megállapíthatjuk a következő különbségeket Halom és Kazal memória.

  • Halom a memóriát az alkalmazás összes része használja, míg a verem memóriát csak a végrehajtás egy szála használja.
  • Amikor egy objektum létrehozásra kerül, mindig a Heap térben van tárolva, és a verem memóriában található hivatkozás. A verem memória csak tartalmaz lokális primitív változók és referenciaváltozók halomtérben lévő tárgyakhoz.
  • A kupacban tárolt objektumok globálisan hozzáférhetők, míg a verem memóriához más szálak nem férhetnek hozzá.
  • A verem memóriájának kezelése a LIFO míg a halom memóriájában összetettebb, mert globálisan használják. A halom memória fel van osztva Fiatal generáció, Old Generation stb., további részletek a Java Garbage Collection webhelyen.
  • Verem memória van rövid életű mivel a halom memória az alkalmazás végrehajtásának kezdetétől egészen a végéig él.
  • Tudjuk használni -XMX és -XMS JVM opció a halom memória indítási és maximális méretének meghatározásához. Tudjuk használni -XSS a verem memória méretének meghatározásához.
  • Ha a verem memória megtelt, a Java futásideje dob java.lang.StackOverFlowError míg ha a kupac memória megtelt, akkor dob java.lang.OutOfMemoryError: Java Heap Spacehiba.
  • A halom memória mérete nagyon alacsony a halom memóriához képest. A memória allokálásának egyszerűsége miatt (LIFO), verem memória nagyon gyors összehasonlítvahalom memória.

Összehasonlító táblázat

PARAMÉTER KAZAL HALOM
Alapvető A memória egy összefüggő blokkban van lefoglalvaA memória véletlenszerű sorrendben van kiosztva
Kiosztás és elosztás Automatikus fordító általProgramozó kézikönyve
Költség KevésbéTöbb
Végrehajtás KeményKönnyen
Hozzáférési idő GyorsabbanLassabban
Fő kérdés MemóriahiányMemória töredezettség
A különbség helye KiválóMegfelelő
Rugalmasság Fix kamatozásúÁtméretezés lehetséges

Ezzel véget értünk ennek a „Memóriaallokáció Java-ban” bemutatónak. Remélem, néhány valós idejű példán keresztül megértette a koncepciót és annak megvalósítását.

Most, hogy megértettedMemória allokáció Java-banalapokat ebben a „Memóriaallokáció Java-ban” cikkben olvassa el a az Edureka, egy megbízható online tanulási vállalat, amelynek több mint 250 000 elégedett tanulóval rendelkező hálózata elterjedt az egész világon. Az Edureka Java J2EE és SOA képzési és tanúsító tanfolyamait olyan hallgatók és szakemberek számára tervezték, akik Java fejlesztők szeretnének lenni. A tanfolyamot úgy tervezték, hogy előrelépést nyújtson a Java programozásban, és betanítson mind az alapvető, mind a fejlett Java koncepciókra, különféle Java keretrendszerekkel együtt, mint például a Hibernate & Tavaszi .

Van egy kérdésünk? Említse meg a „Memóriaallokáció Java-ban” blog megjegyzés rovatában, és a lehető leghamarabb kapcsolatba lépünk Önnel.