Sobes.tech
Middle

Hogyan van felépítve a memória Java-ban?

sobes.tech MI

Válasz az MI-től

A Java memória automatikusan a szemétgyűjtő által kezelt, és több területre oszlik:

  1. Heap (Kupac):

    • Osztályobjektumokat és tömböket tárol.
    • Egy az összes alkalmazás szál számára.
    • A szemétgyűjtő ezen a területen működik.
    • Generációkra van osztva (Young, Old, Permanent).
  2. Stack (Verem):

    • Minden szálnak saját veremje van.
    • Lokális változókat és a heapben lévő objektumokra mutató hivatkozásokat tárol.
    • Az adatok LIFO (utolsó be, első ki) elv szerint kerülnek hozzáadásra és törlésre.
    • Automatikusan felszabadul a módszer befejeztével.
  3. Method Area (Metódus terület) / PermGen (Java 8 előtt) / Metaspace (Java 8-tól):

    • A betöltött osztályok adatait tárolja:
      • Osztály metaadatok.
      • Bytecode a módszerekhez.
      • Statikus változók.
      • Konstansok poolja.
    • A PermGen mérete fix volt, a Metaspace natív memóriát használ, és dinamikusan bővíthető.
  4. Native Method Stacks (Natív módszerek verem):

    • Natív módszerek (pl. C/C++) hívására szolgál.
    • A natív módszer befejeztével felszabadul.
// Memória használatának példája
public class MemoryExample {

    private String instanceVariable; // Heapben tárolódik

    public void myMethod(int parameter) { // parameter a Stackben

        int localVar = 10; // localVar a Stackben

        String localString = "hello"; // "hello" a String Poolban (rész a Heap/Method Area), a localString referencia a Stackben

        Object obj = new Object(); // Object a Heapben, az obj referencia a Stackben

        Integer wrapper = new Integer(5); // Integer a Heapben, a wrapper referencia a Stackben
    }

    public static void main(String[] args) {
        MemoryExample example = new MemoryExample();
        example.myMethod(20);
    }
}

Memória területek és tartalmuk:

Terület Hol található? Mit tárol? Kezelés
Heap Az JVM közös területe Objektumok, tömbök Szemétgyűjtő
Stack Minden szál sajátja Lokális primitív típusok, objektumokra mutató hivatkozások Automatikus (módszer befejeztével)
Method Area Az JVM közös területe Osztály metaadatok, statikus változók, bytecode, konstansok Szemétgyűjtő (osztályok és statikus adatok)
Native Stacks Minden szál sajátja (híváskor) Natív módszerek változói és adatai Automatikus (natív módszer befejeztével)