Sobes.tech
Middle

Kako je memorija organizovana u Javi?

sobes.tech АИ

Одговор од АИ

Memorija u Javi se automatski upravlja od strane sakupljača smeća i podeljena je na nekoliko oblasti:

  1. Heap (Kup):

    • Čuva objekte klasa i nizove.
    • Jedan za sve niti aplikacije.
    • Sakupljač smeća radi sa ovom oblašću.
    • Podeljen je na generacije (Young, Old, Permanent).
  2. Stack (Stek):

    • Svaka nit ima svoj stek.
    • Čuva lokalne promenljive primitivnih tipova i reference na objekte u kupu.
    • Podaci se dodaju i uklanjaju po principu LIFO (Last-In, First-Out).
    • Automatski se oslobađa pri završetku metode.
  3. Method Area (Oblast metoda) / PermGen (pre Java 8) / Metaspace (od Java 8):

    • Čuva informacije o učitanim klasama:
      • Metapodaci klasa.
      • Bytecode metoda.
      • Staticke promenljive.
      • Konstantni pool.
    • Veličina PermGen je bila fiksna, Metaspace koristi nativnu memoriju i može se dinamički proširiti.
  4. Native Method Stacks (Stekovi nativnih metoda):

    • Koristi se za pozive nativnih metoda (npr. C/C++).
    • Oslobađa se pri završetku nativne metode.
// Primer korišćenja memorije
public class MemoryExample {

    private String instanceVariable; // Čuva se u Heap

    public void myMethod(int parameter) { // parameter se čuva u Stack

        int localVar = 10; // localVar se čuva u Stack

        String localString = "hello"; // "hello" u String Pool-u (deo Heap/Method Area), referenca localString je u Stack-u

        Object obj = new Object(); // Object u Heap, referenca obj je u Stack-u

        Integer wrapper = new Integer(5); // Integer u Heap, referenca wrapper je u Stack-u
    }

    public static void main(String[] args) {
        MemoryExample example = new MemoryExample();
        example.myMethod(20);
    }
}

Oblasti memorije i njihov sadržaj:

Oblast Gde se nalazi? Šta čuva? Upravljanje
Heap Zajednička za JVM Objekti, nizovi Garbage Collector
Stack Svoj za svaku nit Lokalni primitivni tipovi, reference na objekte Automatski (pri završetku metode)
Method Area Zajednička za JVM Metapodaci klasa, statičke promenljive, bytecode, konstante Garbage Collector (za klase i statiku)
Native Stacks Svoj za svaku nit (pri pozivu) Promenljive i podaci nativnih metoda Automatski (pri završetku nativnog metoda)