Sobes.tech
Middle+
1051

Hogyan van felépítve a memória a JVM-ben?

Válasz az MI-től

sobes.tech MI

A JVM memória a következő adatterületekre van osztva:

  • Heap (Heap): Olyan memória terület, ahol osztályobjektumok és tömbök tárolódnak. Minden szál számára közös. A szemétgyűjtő (GC) kezeli. Generációkból áll (Young, Old, Permanent/Metaspace).
  • Stack (Verem): Minden JVM szál számára memória terület. Tárolja a helyi változókat, a metódus paramétereket és a veremkeret információkat minden metódushívásnál. Amikor egy metódus befejeződik, a kerete eltávolításra kerül a veremből.
  • Method Area (Metódus terület): Osztályok metaadatait tárolja: metódus bytecode-ok, konstans pool, statikus változók. Régebbi JVM verziókban Permanent Generation néven ismert, az újabbakban (Java 8+) Metaspace-ra cserélték.
  • PC Registers (Program Counter Regiszterek): Minden JVM szál számára. A következő végrehajtandó JVM utasítás címét tárolja.
  • Native Method Stacks (Natív metódus verem): Natív (nem-Java) metódus hívásokat tárol. A alkalmazás által hívott natív könyvtárakat használja.

A Heap memória kezelése a szemétgyűjtő (GC) feladata. Automatikusan felszabadítja a nem használt objektumok memóriáját.

Példa a Heap és Stack működésére:

// Az 'obj' objektum a Heap-ben jön létre.
Object obj = new Object();

// A helyi változó 'i' a szál veremében tárolódik.
int i = 10;

public void myMethod(int param) { // A paraméter param ebben a metóduskeret veremében van.
    // A helyi változó 'local' ebben a metóduskeret veremében van.
    String local = "hello";
    // Egy új objektum jön létre a Heap-ben. A referenciája ebben a metóduskeret veremében van.
    MyClass myObj = new MyClass();
}

A Heap és Stack közötti különbségek:

  • Heap: Minden szál számára közös, objektumokat tárol, a GC kezeli.
  • Stack: Egy szálhoz tartozik, primitív típusokat és objektumreferenciákat tárol, a metóduskeretek kezelik.

A JVM memória kezelése magában foglalja:

  • Memória allokáció (Allocation) objektumok létrehozásakor.
  • Memória felszabadítás (Deallocation) nem használt objektumok esetén (garbage collection).
  • A memória felhasználásának optimalizálása.