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:
-
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).
-
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.
-
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ő.
- A betöltött osztályok adatait tárolja:
-
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) |