Middle
Ako je pamäť v Jave usporiadaná?
sobes.tech AI
Odpoveď od AI
Pamäť v Jave je riadená automaticky garbage collectorom a je rozdelená na niekoľko oblastí:
-
Heap (Hromada):
- Ukladá objekty tried a poľa.
- Jeden pre všetky vlákna aplikácie.
- Garbage Collector pracuje s touto oblasťou.
- Rozdelená je na generácie (Young, Old, Permanent).
-
Stack (Zásobník):
- Každé vlákno má svoj vlastný zásobník.
- Ukladá lokálne premenné primitívnych typov a odkazy na objekty v hromade.
- Dáta sa pridávajú a odstraňujú podľa princípu LIFO (Last-In, First-Out).
- Automaticky sa uvoľňuje pri ukončení metódy.
-
Method Area (Oblasť metód) / PermGen (pred Java 8) / Metaspace (od Java 8):
- Ukladá informácie o načítaných triedach:
- Metadata tried.
- Bytecode metód.
- Statické premenné.
- Konstantný pool.
- Veľkosť PermGen bola pevná, Metaspace využíva nativnú pamäť a môže sa dynamicky rozširovať.
- Ukladá informácie o načítaných triedach:
-
Native Method Stacks (Zásobníky nativných metód):
- Používa sa na volania nativných metód (napríklad C/C++).
- Uvoľňuje sa pri ukončení nativnej metódy.
// Príklad použitia pamäte
public class MemoryExample {
private String instanceVariable; // Uložené v Heap
public void myMethod(int parameter) { // parameter uložený v Stack
int localVar = 10; // localVar uložené v Stack
String localString = "hello"; // "hello" v String Pool (časť Heap/Method Area), referencia localString v Stacku
Object obj = new Object(); // Object v Heap, referencia obj v Stacku
Integer wrapper = new Integer(5); // Integer v Heap, referencia wrapper v Stacku
}
public static void main(String[] args) {
MemoryExample example = new MemoryExample();
example.myMethod(20);
}
}
Oblasti pamäte a ich obsah:
| Oblasť | Kde sa nachádza? | Čo uchováva? | Správa |
|---|---|---|---|
| Heap | Spoločná pre JVM | Objekty, polia | Garbage Collector |
| Stack | Svoj pre každé vlákno | Lokálne primitivne typy, odkazy na objekty | Automatické (pri ukončení metódy) |
| Method Area | Spoločná pre JVM | Metadata tried, statické premenné, bytecode, konštanty | Garbage Collector (pre triedy a statiku) |
| Native Stacks | Svoj pre každé vlákno (pri volaní) | Premenné a dáta nativných metód | Automatické (pri ukončení nativnej metódy) |