Sobes.tech
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í:

  1. 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).
  2. 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.
  3. 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ť.
  4. 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)