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.